-
[백준 11866번] - Deque / PythonData Engineering/알고리즘 - Python 2021. 6. 30. 20:07
[백준 11866번] - Deque
https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
(정답)
from collections import deque N,K=map(int, input().split()) queue=deque([i for i in range(1,N+1)]) ans=[] while queue: queue.rotate(-(K-1)) q=queue.popleft() ans.append(q) print('<'+', '.join(map(str,ans))+'>')
📍위의 문제를 손으로 풀어보면 아래와 같은 원리를 발견할 수 있다.
▪ N=4, K=3
▪ [1,2,3,4] → 3 제거 후 → [4,1,2]
1. queue를 반시계 방향으로 2번 회전시킨다. ex) [1,2,3,4] → [2,3,4,1] → [3,4,1,2]
2. popleft()를 사용하여 왼쪽 끝 요소를 제거한다. ex) [3,4,1,2] → 3이 제거됨 → [4,1,2]
그래서 deque 메서드의 rotate, popleft를 사용한 것이다.
📍 join: 문자열을 다룰 때 사용한다.
join(map(str, ans)) → map으로 리스트의 정수를 문자열로 바꾸고, join으로 합쳐준다.