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())
d = deque()
result = []
for i in range(n):
d.append(i+1)
while d:
# k-1까지 맨 앞을 뒤로 보내준다
for _ in range(k-1):
d.append(d.popleft())
# 맨 왼쪽을 pop해서 result에 넣어준다.
result.append(d.popleft())
print(str(result).replace('[','<').replace(']','>'))
해결방법은 k번째 앞에까지를 뒤로 붙이고 k번째가 왔을때 popleft를 해주었다.
ex)
1 2 3 4 5 6 7
7 3
3
3 4 5 6 7 1 2 - 3
4 5 6 7 1 2
6 7 1 2 4 5 - 6
7 1 2 4 5 - 2
4 5 7 1 - 7
1 4 5
5 1 4 - 5
1 4
4 1
1 4 - 1
4
4 - 4
<3, 6, 2, 7, 5, 1, 4>
'알고리즘' 카테고리의 다른 글
[프로그래머스 LV2] 전화번호 목록 - 파이썬 (0) | 2023.12.20 |
---|---|
[프로그래머스 LV 2] 예상 대진표(파이썬) (2) | 2023.12.07 |
백준-10866 (1) | 2023.10.02 |
이진 탐색 - 구현 (0) | 2023.09.25 |
퀵 정렬 (0) | 2023.09.22 |