코딩하는 해맑은 거북이

[Python] 프린터 큐 - 백준 본문

코딩테스트

[Python] 프린터 큐 - 백준

#CJE 2023. 11. 29.
해당 글은 백준 1966번 '프린터 큐' 문제를 다룬다.

문제

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

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

www.acmicpc.net

 

설명

해당 문제는 리스트의 인덱스를 이용해서 간단하게 풀 수 있는지 알았지만, 3번째 테스트케이스를 진행하면서 중요도가 같은 문서들로 인덱스 접근은 어렵다고 느꼈다. 따라서 큐의 rotate와 popleft를 이용하여 해결하였다.
현재 큐의 0번째가 max 값이 아니라면 왼쪽으로 한 칸씩 회전시키고, max 값이라면 popleft를 하고 문서를 출력했으므로 result를 +1 시켜준다. 이때, 찾고자하는 m번째 인덱스값도 같이 1칸씩 이동시켜주어야 한다.
그리고 큐의 0번째가 max 값이면서 찾고자 하는 인덱스인 m도 0이라면, while문을 종료시켜고 result를 출력시켜주면 된다.
 

코드

from collections import deque

T = int(input())
for t in range(T):
    n, m = map(int, input().split())
    queue = deque(list(map(int, input().split())))
    result = 0
    while queue:
        max_value = max(queue)
        if queue[0] != max_value:
            queue.rotate(-1)
        else:
            queue.popleft()
            result += 1
            if m == 0:
                break
        m = (m - 1) % len(queue)
    print(result)

     

 
 

Comments