[백준 11866] 요세푸스 문제 0 / 파이썬 + rotate

권한·2025년 12월 28일

BOJ

목록 보기
26/40

1부터 N까지 N명의 사람이 원을 이루어 앉아있고, 순서대로 K번째 사람을 제거한다. 제거되는 사람을 순열에 저장해서 출력하는 문제이다.

아이디어

deque에 대한 것을 구글링하다가 rotate라는 함수를 봤었어서, 이 문제를 딱 읽자마자 rotate가 생갔났다.
1. deque자료형에 1부터 N까지 저장해서 rotate로 돌린다.
2. 맨 앞의 요소를 pop으로 꺼내서 별도의 리스트에 저장, 출력과의 포맷을 맞추기 위해 join으로 리스트 요소를 합친다

❗ rotate 방향
List = [1, 2, 3, 4, 5, 6, 7]이라는 데크 자료형이 있다고 하자. List.rotate(2)을 실행하게 되면 List = [6, 7, 1, 2, 3, 4, 5]가 된다. 오른쪽으로 옮겨지는 것이다.
-> 양수가 아닌 음수를 이용하면 왼쪽으로 돈다.

❗ join은 문자형을 합치기 때문에 사전에 정수로 변경하든, map(str, res)을 사용하든 해야한다.

from collections import deque
N, K = map(int, input().split())

people = deque(i for i in range(1, N + 1))
res = []

while people:
    people.rotate(-(K - 1))
    res.append(str(people.popleft()))

print(f"<{", ".join(res)}>")
profile
티스토리로 옮김

0개의 댓글