알고리즘/알고리즘 문제 풀이
(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)