[Python] BOJ 1966 - 프린터 큐(Queue)

728x90
반응형

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

 

1966번: 프린터 큐

문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를

www.acmicpc.net

import sys
input = sys.stdin.readline

t = int(input())
for i in range(t):
    q = []
    N,M = map(int,input().split())
    queue = list(map(int,input().split()))
    for i in queue:
        q.append(i)
    p = M
    cnt = 0
    while(True):
        if(max(q) == q[0]):
            q.pop(0)
            cnt += 1
            if(p == 0):
                print(cnt)
                break
            else:
                p -= 1
                if(p<0):
                    p = len(q)-1
        else:
            p -= 1
            if(p<0):
                p = len(q)-1
            q.append(q.pop(0))

출력 순서가 궁금한 인덱스 M을 p에 저장하고 반복문을 돌려가며 queue의 첫번째 원소가 max이면 pop하는 식으로 코드를 짰다. 큐의 첫번째 원소가 max가 아니라면 프린트를 하지않으므로 pop한 뒤 맨뒤로 보내고 우리가 궁금해하는 인덱스 값이 한칸 앞으로 오므로 p를 1감소시켰다. (p가 0보다 작아지면 다시 맨뒤로 보내야하므로 len(q)-1 로 설정)
또한 max(q)가 q[0]일때 p가 0이라면 우리가 궁금해하는 문서가 프린트되는 상황이므로 cnt를 출력하고 종료하고
아니면 q[0]을 pop하고 p를 1감소시키는 식으로 코드를 짰다.

728x90
반응형
TAGS.

Comments