문제

[BaekJoon] 1158 요세푸스 문제


풀이

  1. deque()을 사용해 1 ~ n을 넣어준다.
  2. q가 비어있을 때 까지 while문을 돈다.
  3. for문의 범위는 k로, q의 맨 왼쪽 값을 popleft()를 사용해 제거하고 그 값을 remove_list에 다시 append 하면 제거해야 할 k번째 수가 제일 왼쪽에 들어간다.
  4. k번째 수를 제거해 remove_list에 추가한다.
  5. 출력 형식에 맞춰 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
from collections import deque

n, k = map(int, input().split())
q = deque(range(1, n+1))
remove_list = []

while q:
    for _ in range(k-1):
        q.append(q.popleft())
        
    remove_list.append(q.popleft())

print(str(remove_list).replace('[', '<').replace(']', '>'))

deque() 사용해서 풀어보고 list도 사용해서 풀어봤는데 조금 어려웠다.

Leave a comment