알고리즘/알고리즘 문제 풀이

(Python) 백준 1966번 - 프린터 큐

용꿀 2023. 1. 13. 13:53

문제 링크 : https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

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

www.acmicpc.net

풀이

큐와 이차 배열을 사용하여 문제 풀이를 진행했다.

중요도와 문서 번호를 동시에 큐에 담아서 진행하는 것이 풀이의 핵심이라고 볼 수 있겠다.

이차 배열이 아니라 딕셔너리를 사용하여서 풀이하는 것도 가능할거 같다.

import sys
from collections import deque

for _ in range(int(sys.stdin.readline())):
    n, m = map(int, sys.stdin.readline().split())
    que = deque()
    priority = sys.stdin.readline().strip().split() # 우선순위 저장
    for i in range(n):
        que.append([i, int(priority[i])]) # 문서 순서와 중요도를 한번에 저장
    if n == 1:
        print(1)
    else:
        cnt = 0 # 몇 번째로 출력되었는지 카운트
        while True: # 몇 번째로 인쇄되었는지 궁금한 문서가 인쇄될 때까지 반복
            clumn = [i[1] for i in que] # 중요도 열만 뽑아내기
            max_num = max(clumn) # queue에 존재하는 문서들의 중요도 중 최대값
            if que[0][1] == max_num: # 맨 앞의 문서 중요도가 queue에 존재하는 문서들 중 가장 크다면 출력
                cnt += 1 # 출력 카운트 증가
                if que[0][0] == m: # 이 문서가 출력 순서를 알고 싶었던 문서라면
                    break # while문 break
                que.popleft() # 출력 완료
            else: # 더 중요도가 큰 문서가 있다면
                que.append(que[0]) # queue의 맨 뒤로 
                que.popleft() # 이동
        print(cnt)