[PS][BOJ/10812]-바구니 순서 바꾸기

2023. 2. 28. 10:59· PS/Implementation
목차
  1. 문제 설명
  2. 입력
  3. 출력
  4. 문제 분석 과정

문제 설명

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다.

도현이는 앞으로 M번 바구니의 순서를 회전시키려고 만들려고 한다. 도현이는 바구니의 순서를 회전시킬 때, 순서를 회전시킬 범위를 정하고, 그 범위 안에서 기준이 될 바구니를 선택한다. 도현이가 선택한 바구니의 범위가 begin, end이고, 기준이 되는 바구니를 mid라고 했을 때, begin, begin+1, ..., mid-1, mid, mid+1, ..., end-1, end 순서로 되어있는 바구니의 순서를 mid, mid+1, ..., end-1, end, begin, begin+1, ..., mid-1로 바꾸게 된다.

바구니의 순서를 어떻게 회전시킬지 주어졌을 때, M번 바구니의 순서를 회전시킨 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.

둘째 줄부터 M개의 줄에는 바구니의 순서를 바꾸는 만드는 방법이 주어진다. 방법은 i, j, k로 나타내고, 왼쪽으로부터 i번째 바구니부터 j번째 바구니의 순서를 회전시키는데, 그 때 기준 바구니는 k번째 바구니라는 뜻이다. (1 ≤ i ≤ k ≤ j ≤ N)

도현이는 입력으로 주어진 순서대로 바구니의 순서를 회전시킨다.

출력

모든 순서를 회전시킨 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.

문제 분석 과정

총 n 개의 바구니를 갖고 있으므로 1 부터 n 까지의 배열을 생성한다.

m 번을 회전 시킬 것이므로 for문을 통해 단순 반복과정을 처리한다.

이제 1번 회전 할 때를 살펴보자.

1번 처리 할때, 배열의 순서는 begin mid end -> mid end begin 으로 변하게된다.

이런 경우는, 슬라이싱한후 갖다 붙이면 된다. (시간복잡도가 좋지는 못하겠지만 ,,ㅎ)

입력값을 받을 때도 주의해야한다, begin, mid, end 순이 아니라 begin, end, mid 순 이다

배열에서 인덱스는 0 부터 카운팅하므로,, 1씩 - 해준다.

배열의 슬라이싱을 할때 범위에 유의한다.

소스코드


n,m = map(int,input().split())
# 총 n 개의 바구니를 갖고 있고
arr = [i for i in range(1,n+1)]
# m 번을 회전 시킨다.
# 1번 회전 할 때
# begin mid end -> mid end begin 이된다.
# 슬라이싱한후 갖다 붙이면 된다.

# m번의 시행 
for _ in range(m):
    # 바구니를 1번 시행 시키기위한 피벗값을 입력받음
    begin, end, mid = map(int,input().split())
    # begin to end 만 회전시키고, 기준은 mid 이다. 
    # mid를 기준으로 인덱스 슬라이싱을 하면 된다.
    begin -= 1;end -= 1;mid -= 1
    # 배열에서 인덱스는 0 부터 카운팅하므로,, 1씩 - 해준다.
    arr[begin:end+1] = arr[mid:end+1] + arr[begin:mid]
    # 배열의 슬라이싱을 할때 범위에 유의한다. 

print(*arr)

분류

구현(implementation), 시뮬레이션(simulation)

문제 원본
소스코드 원본

728x90
반응형

'PS > Implementation' 카테고리의 다른 글

[PS][BOJ/1181]-단어 정렬  (0) 2023.04.04
[PS][BOJ/10813]-공 바꾸기  (0) 2023.02.23
[PS][BOJ/2439]-별 찍기-1  (0) 2023.02.20
  1. 문제 설명
  2. 입력
  3. 출력
  4. 문제 분석 과정
'PS/Implementation' 카테고리의 다른 글
  • [PS][BOJ/1181]-단어 정렬
  • [PS][BOJ/10813]-공 바꾸기
  • [PS][BOJ/2439]-별 찍기-1
황빵
황빵
CS,PS, Algorithm
황빵
황빵's World
황빵
전체
오늘
어제
  • 분류 전체보기 (40)
    • PS (19)
      • DP (8)
      • Divide and Conquer (2)
      • Math (2)
      • Geometry (2)
      • Implementation (4)
      • Graphs (1)
    • Dev (20)
      • JAVA (5)
      • Spring (2)
      • DesignPattern (13)
    • Review (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 백준
  • 객체지향프로그래밍
  • dp
  • 파이썬
  • 반복문
  • GOF
  • BOJ
  • 알고리즘
  • 구조패턴
  • Design Pattern
  • 분할정복법
  • OOP
  • 코딩테스트
  • 설계패턴
  • 구조 패턴
  • 구현
  • Python
  • java
  • 11054
  • ps

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
황빵
[PS][BOJ/10812]-바구니 순서 바꾸기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.