백준 1158번 바로가기

나의 풀이

from collections import deque
import sys

n, k = map(int, sys.stdin.readline().split())
q = deque([i+1 for i in range(n)])
n = 1
ans = []
while q:
    temp  = q.popleft()
    if n == k:
        ans.append(temp)
        n = 1
    else:
        q.append(temp)
        n += 1
print('<', end='')
for i in ans[:-1]:
    print(i, end=", ")
print(f'{ans[-1]}>')

CODE REVIEW

  1. queue을 이용한 요세푸스 문제의 해결.
  2. 원형 array를 활용하는 방법도 있긴 하지만, 개인적으로 queue 활용하는 편이 깔끔해 보인다.
  3. 마지막에 출력하는 부분이 의외로 손이 많이 갔는데, for문을 사용하지 않고 싶다면 print(*ans, sep=', ', end='')로 해결하는 방법도 있다.