알고리즘

백준-1158 (파이썬)

이경찬 :) 2023. 10. 2. 17:14

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

<3, 6, 2, 7, 5, 1, 4>