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)}>")