본문 바로가기

알고리즘

백준-1158 (파이썬)

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>

'알고리즘' 카테고리의 다른 글

[프로그래머스 LV2] 전화번호 목록 - 파이썬  (0) 2023.12.20
[프로그래머스 LV 2] 예상 대진표(파이썬)  (2) 2023.12.07
백준-10866  (1) 2023.10.02
이진 탐색 - 구현  (0) 2023.09.25
퀵 정렬  (0) 2023.09.22