카테고리 없음

[Python] 백준 풀기 1966 - 프린터 큐

XEV 2022. 9. 20. 22:15

파이썬 백준 1966번

실버3

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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

 

 

문제 보기

 

 

 

 

문제 풀기

최댓값을 저장하고 deque 제일 왼쪽한 값을 뽑아 저장.

제일 왼쪽 원소가 없어 졌기에 위치 M 의 값을 하나 줄여줌.

 

뽑아 저장된 front 숫자가 best 값과 같으면 프린터가 작동하기에 count 를 하나 올려줌.

while 이 도는 동안 best == front 경우에 대해 M 이 0 보다 작아지면 그때의 위치는 알고자 지정 프린트 문서의 숫자이기 때문에 결과 count 도출.

 

그렇지 않은, 뽑아서 저장된 front 숫자는 제일 뒤로 옮기기 위해 append(front) 사용.

while 이 도는 동안 아직 front 값 뒤에는 best 값이 존재하기 때문에 지정 프린트 문서는 제일 뒤로 이동하면서 그 위치 M 값도 제일 마지막 숫자로 변경.

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline

from collections import deque


test_nums = int(inputdata().strip())

for _ in range(test_nums):
    N, M = map(int, inputdata().split())
    docs_dq = deque(list(map(int, inputdata().split())))
    
    count = 0
    while docs_dq:
        best = max(docs_dq)
        front = docs_dq.popleft()
        M -= 1
        
        if best == front:
            count += 1
            if M < 0:
                print(count)
                break
        else:
            docs_dq.append(front)
            if M < 0:
                M = len(docs_dq) - 1



# 3
# 1 0
# 5
# 4 2
# 1 2 3 4
# 6 0
# 1 1 9 1 1 1

# 1
# 2
# 5