본문 바로가기
백준

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

by 헤이즐넛 좋아하는 개발자 2024. 2. 23.

1. 문제와 예제

문제
예제


2. 전체 코드

from collections import deque
import sys
input = sys.stdin.readline

# 입력 받기
T = int(input().rstrip()) # 테스트케이스 수

for _ in range(T):
    N, M = map(int, input().split()) # 문서 개수, 궁금한 문서가 몇 번째에 놓여 있는지
    deq = deque(list(map(int, input().split()))) # 큐
    res = 0 # 문서가 몇 번쨰로 인쇄되는지

    while deq:
        max_num = max(deq)
        front = deq.popleft()
        M -= 1

        if (max_num == front):
            res += 1
            if M < 0:
                print(res)
                break
        else:
            deq.append(front) # 문서를 인쇄하지 않고 큐의 가장 뒤에 재배치
            if M < 0:
                M = len(deq) - 1

3. 풀이

생각 과정

이렇게 가장 앞에 있는 요소를 삭제하고(deq.popleft()) 가장 뒤에 요소를 추가하는(deq.append(X)) 등의 과정을 하는 문제에서는 큐 구조를 활용해야 한다. 예제 하나를 가지고 각 과정에 따른 전개를 정리하면서 규칙성을 찾았다.