Data Engineering/알고리즘 - Python

[백준 11866번] - Deque / Python

ddoddo201 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으로 합쳐준다.