BOJ/Python

백준 1966번 프린터 큐 파이썬

띵지니어 2024. 3. 8. 01:44

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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

내 답안

from collections import deque

N = int(input())
for i in range(N):
    N, M = map(int, input().split())
    priority = deque(list(map(int, input().split())))
    ind = deque([i for i in range(N)])
    cnt = 0
    
    while priority:
        m = max(priority)
        
        if priority[0] < m:
            priority.append(priority.popleft())
            ind.append(ind.popleft())
        elif priority[0] == m:
            priority.popleft()
            cnt += 1
            if ind.popleft() == M:
                print(cnt)
                break

 

Review

코드의 논리를 보면 다음과 같습니다.

1. 가장 큰 priority 정하기

    2. 가장 큰 priority 와 현재 맨 앞에 있는 원소 비교

        2-1. 맨 앞에 있는 원소 < 가장 큰 priority 원소 이면

            해당 priority 원소와 인덱스 원소를 맨 뒤로 보내기

        2-2. 맨 앞에 있는 원소 == 가장 큰 priority 원소 이면

            출력 수(cnt) += 1

            해당 원소 제거, 해당 인덱스가 궁금한 인덱스 인지 비교

                2-2-1. 해당 인덱스 == 궁금한 인덱스 이면

            index 출력하고

            반복문 종료

 


해당 입력일 때의 로직을 그림으로 그려서 설명해 보겠습니다.

주어진 priority 와 ind 를 튜플 형태로 묶어서도 해결할 수 있는 문제지만
저는 따로 그림 처럼 나눠서 해결을 해보았습니다.