몽상실현개발주의

[BOJ] 1158 / 요세푸스 문제 / Python 파이썬 본문

Algorithm PS/BOJ

[BOJ] 1158 / 요세푸스 문제 / Python 파이썬

migrationArc 2021. 5. 27. 16:20

 [BOJ] 1158 / 요세푸스 문제 / Python 파이썬

[BOJ] 1158 / 요세푸스 문제 / Python 파이썬

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

 

1158번: 요세푸스 문제

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

www.acmicpc.net

 

풀이

Circular Queue(원형 큐) 를 구현하는 문제이다.

Python 에서 Circular Queue 는 deque 의 rotate() method 를 활용하면 쉽게 구현이 가능하다.

 

rotate(N) 은 N 만큼 deque 객체를 회전 시켜준다.

N 이 양수이면 오른쪽으로 회전, N 이 음수이면 오른쪽으로 회전

ex) [1, 2, 3].rotate(1) -> [2, 3, 1]

 

문제의 풀인은 원형 큐를 index 를 순환 시키는 방법으로 구현하였다.

index 가 Array 의 끝에 도달하면, 다시 0으로 회귀한다.

 

N, K = map(int, input().split())

queue = [ i for i in range(1, N+1)]
result = []
idx = 0
while queue:
    idx = (idx+(K-1)) % len(queue)
    result.append(queue.pop(idx))
    
print("<"+", ".join(map(str, result))+">")

 

Comments