반응형

입력
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
출력
예제와 같이 요세푸스 순열을 출력한다.
예제 입력 1
7 3
예제 출력 1
<3, 6, 2, 7, 5, 1, 4>
deque를 사용하면 다음과 같은 순서로 문제를 해결할 수 있다
- 큐 초기화: 1부터 N까지의 숫자를 deque에 순서대로 넣습니다. 이 숫자들이 사람을 나타냄
- K번째 사람 찾기: K번째 사람을 찾기 위해 K-1번 큐를 왼쪽으로 회전시킨다 (deque.rotate(-1)).
- K번째 사람을 찾기 위해 K번 회전하는 것이 아니라 K-1번 회전하는 이유는, 회전 후 큐의 맨 앞에 있는 사람이 우리가 찾는 K번째 사람이 되기 때문이다.
- 사람 제거: 큐의 맨 앞에 있는 사람(popleft())을 제거하고, 그 제거된 사람을 결과 리스트에 추가한다.
- 반복: 큐에 사람이 없을 때까지 2~3번 과정을 반복한다.
from collections import deque
n, k = map(int, input().split())
result = []
queue = deque([i for i in range(1, n + 1)])
while queue:
# k-1번 왼쪽으로 회전
queue.rotate(-(k - 1))
# 맨 앞에 있는 사람을 제거하고 결과 리스트에 추가
result.append(queue.popleft())
print("<" + ", ".join(map(str, result)) + ">")반응형
'알고리즘' 카테고리의 다른 글
| 백준 : 괄호 - 9012 (0) | 2025.10.04 |
|---|---|
| 백준 : 좌표 정렬하기 - 11650 (0) | 2025.10.04 |
| 백준 : 회전하는 큐 - 1021 (0) | 2025.10.03 |
| 백준 : 미로 탐색 - 2178 (0) | 2025.10.02 |
| 백준 : 특정 거리의 도시 찾기 - 18352 (0) | 2025.10.01 |