문제
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
입력
- 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
출력
- 예제와 같이 요세푸스 순열을 출력한다.
입력 예제
7 3
출력 예제
<3, 6, 2, 7, 5, 1, 4>
문제 풀이
- k - 1 번째 값까지 pop해서 큐의 뒤에 붙인다.
- 그 후, 맨 앞의 값이 k번째 값이므로, pop해서 answer에 붙인다.
- 위 과정 반복하여, answer에 요세푸스 순열 저장 후, 출력 형식 맞추기 위해, answer의 값들을 int가 아닌 문자로 바꾼다.
- 형식에 맞게 출력한다.
코드
from collections import deque
n,k = map(int,input().split())
queue = deque(range(1,n+1))
answer = []
# k - 1 번째 값까지 뒤에 붙이기
while queue:
for i in range(k - 1):
queue.append(queue.popleft())
# 맨 앞에 있는 값 answer 에 붙이기
answer.append(queue.popleft())
answer = list(map(str,answer))
print(f'<',', '.join(answer),f'>',sep='')
'Algorithm > Stack & Queue' 카테고리의 다른 글
| [Python] 백준 9935번 문자열 (0) | 2024.07.15 |
|---|---|
| [JAVA] 백준 1715번 카드 정렬하기 (1) | 2023.12.13 |
| [JAVA] 백준 11000번 강의실 배정 (1) | 2023.12.13 |
| [Python] SWEA 1220번 Magnetic (1) | 2023.05.12 |
| [Python] 백준 2812번 크게 만들기 (0) | 2023.05.11 |