문제풀이/백준
[python/파이썬] 백준 1966 - 프린터 큐 (실3)
bbugi
2023. 7. 17. 01:36
https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
자료구조 - 큐(queue)
파이썬에서 자료형 큐를 사용할때는 deque 로 사용하면 된다.
deque는 collections 라이브러리에 내장되어 있어 from collections import deque로 사용 가능하다.
-
queue는 '선'입 '선'출 형태 자료구조이고,
deque의 경우 양방향 큐로 선입,후입 어느쪽으로든 뺄 수 있다.
---
deque는 rotate(회전)이 가능한데
음수를 넣으면 왼쪽으로 회전 ( 맨 왼쪽 n개의 값을 가장 오른쪽으로 이동)
양수를 넣으면 오른쪽으로 회전 (맨 오른쪽 n개의 값을 가장 왼쪽으로 이동) 한다.
▷ deque.rotate(-2) : 왼쪽으로 2개 회전
ex) 1 2 3 4 5 6 → 3 4 5 6 1 2
deque.rotate(3) : 오른쪽 3개 회전
ex) 1 2 3 4 5 6 → 4 5 6 1 2 3
---
백준에 나와있는 예시는 rotate(1)로 해도 정답 출력값 이 나온다.
문제 풀 때 함수도 제대로 확인하고 풀자!
from collections import deque
t = int(input())
for _ in range(t):
n, m = map(int, input().split())
pop_num = []
queue = deque([i+1 for i in range(n)])
find_num = queue[m]
imp_q = deque(map(int, input().split()))
while True:
if len(imp_q) == 0 :
break
max_idx = imp_q.index(max(imp_q))
if max_idx != 0:
queue.rotate(-1)
imp_q.rotate(-1)
continue
elif max_idx == 0:
pop_num.append(queue.popleft())
imp_q.popleft()
continue
for num in pop_num :
if find_num == num :
print(pop_num.index(num) + 1)