백준 1158 요세푸스 문제 / python

이유참치·2025년 7월 31일

백준

목록 보기
12/248

문제 : 1158

풀이 point

큐를 활용하여 푸는 문제라고 되어있지만 편의를 위해 덱을 사용하여 풀 수 있다.
원을 돈다고 가정하면서 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

profile
임아리 - 대학생

0개의 댓글