Algorithm Study/Python

[백준 파이썬] # 1158 요세푸스 문제

728x90
반응형

Silver V

# 1158 요세푸스 문제

링크 : https://www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

 

풀이

from collections import deque

N, K = map(int, input().split())
queue = deque(list(range(1, N+1)))
li = []

while queue:
    for i in range(K-1):
        pop = queue.popleft()
        queue.append(pop)

    insert = queue.popleft()
    li.append(insert)

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

 

풀이 방법

  • 큐에서 K-1개 만큼 popleft와 append를 적용한다
  • 큐에서 popleft를 통해 뽑은 값을 li에 기록한다
  • queue에 모든 값이 빠져나올 때까지 반복한다

 

풀이 후기

  • 회전하는 구조에 큐를 활용할 수 있다
  • #11866 요세푸스 문제 0(Silver IV)와 동일한 문제다