본문 바로가기

백준 문풀

[Python] 구현 - 1966.프린터큐(실3) / 큐

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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

>>문제포인트

:처음에는 heapq로 구현했었는데 동일 중요도가 있을 경우 순서계산이 모호해짐

=> 문제에서 제시한대로 큐를 기반으로 충실히 구현하는 게 포인트

 

>>느낀점

파이썬을 통한 deque와 heapq의 사용법을 자세히 알아두자.

 

from collections import deque

num= int(input())

for _ in range(num):
    q= deque()

    #문서의 개수와 궁금한 값
    n, k= map(int, input().split())
    weight= list(map(int, input().split()))

    for i in range(n):
      q.append([weight[i],i]) #[중요도,순서]별로 넣어줌

    #나오는 순서 담을 것
    cnt=0
    while(q):
      paper = q.popleft()
      #프린트가 가능하고 찾는 순서일 때 => 정답출력
      if paper[0]==max(weight) and paper[1]==k:
        print(cnt+1)
        break
      #중요도가 가장 높지만 찾는 순서가 아닐 때-> 중요도 최고값 갱신/순서+1
      elif paper[0]==max(weight):
        cnt+=1
        weight.remove(max(weight))
      #프린트가 불가 -> 다시 뒤로 넣기
      else:
        q.append(paper)