큐를 활용하여 푸는 문제라고 되어있지만 편의를 위해 덱을 사용하여 풀 수 있다.
원을 돈다고 가정하면서 K번째 사람이 나올 때까지 앞에 있는 요소를 빼서 뒤에 넣는 작업을 반복한다.
K번째가 되면 그 사람을 빼고 출력한다. 이것을 큐에 아무 것도 없을 때 진행한다.
출력 형식 때문에 조금 고생일 수 있다. 위에서는 큐에 아무것도 없을 때까지 진행한다 되어있지만 실제로는 요소가 하나 남으면 종료를 해야한다.(출력을 위해)
맨 처음 큐를 돌기 전에 < 를 출력하고 K번째 사람을 뺄때마다 출력(쉼표도 해줘야함), 큐에 요소가 하나남으면 종료하고 마지막 요소를 출력 한뒤, >를 출력하면 된다.
#백준, 1158 요세푸스 문제
from collections import deque
N, K = map(int, input().split())
q = deque()
answer = []
for i in range(1, N+1):
q.append(i)
i = 1
print("<", end="")
while True:
if len(q) == 1:
break
if i % K == 0:
print(q.popleft(), end=", ")
i += 1
else:
num = q.popleft()
q.append(num)
i += 1
print(q.popleft(), end = "")
print(">")
2025-07-11T04:15:46.128Z