BOJ(백준) 1966번 프린터큐 파이썬

2021. 3. 19. 14:53개인 공부 공간/Algorithm

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net


코드

from collections import deque
import sys
r = sys.stdin.readline
T = int(r())
for _ in range(T):
    N,M = map(int,r().split())
    que =  deque(list(map(int,input().split())))
    cnt1 = 0
    while que[M] != max(que):
        if que[0] == max(que):
            que.popleft()
            cnt1 += 1
            if M != 0:
                M -= 1
            else:
                M = len(que) - 1
        else:
            que.append(que.popleft())
            if M != 0:
                M -= 1
            else:
                M = len(que) - 1

    cnt2 = 1
    for i in range(len(que)):
        if que[i] == que[M] and i < M:
            cnt2 += 1
    print(cnt1+cnt2)

 

해설

while 문을 이용하여 몇번째로 인쇄되었는지 궁금한 문서의 중요도가 que 에서 제일 큰 값이될 때 까지 가장 앞에 있는 문서의 중요도가 가장 클 경우 popleft() 를 해서 출력하거나 그렇지 않을 경우 append(que.popleft()) 를 이용해 맨 뒤로 보내주었다. 동시에 그 문서의 index인 M 을 상황에 맞게 변화시켜 주었다. 그렇게 하여 그 문서의 중요도가 que 내에서 커질때까지 cnt1의 값을 하나씩 증가시켰다. 그 후 문서의 중요도가 동점인 경우를 고려하기 위해 cnt2 를 이용하였다.

 

결과

프린터큐결과.PNG

출처: https://privatedevelopnote.tistory.com/81 [개인노트]