CodingTest/Baekjoon

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

JunJangE 2021. 9. 17. 12:28

문제

 

1966번: 프린터 큐

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

www.acmicpc.net

알고리즘

- 테스트 케이스만큼 반복하여 인쇄 횟수를 출력한다.

- 문서의 중요도와 인쇄 순서를 heap 리스트에 추가한다.

- 반복문을 통해 첫 번재 문서의 중요도가 제일 높은지 확인하여 문제를 수행한다.

코드

import sys

t = int(sys.stdin.readline())

# 테스트 케이스만큼 반복
for _ in range(t):
    n, m = map(int, sys.stdin.readline().split())
    k = list(map(int, sys.stdin.readline().split()))
    heap = []

    # 문서의 중요도와 인쇄 순서를 heap에 추가
    for i in range(n):
        heap.append([k[i], i])

    cnt = 0 # 인쇄 횟수
    while True:

        # 제일 첫 번째 문서의 중요도가 제일 높을 경우
        if heap[0][0] == max(heap)[0]:
            cnt += 1 # 카운트

            # 찾고 있는 순서이면 멈춘다.
            if heap[0][1] == m:
                break

            # 찾고있는 순서가 아니라면 인쇄한다.
            heap.pop(0)

        # 제일 첫 번째 문서의 중요도가 제일 높지 않은 경우
        else:
            # 첫 번째 문서를 맨 뒤로 추가한다.
            heap.append(heap.pop(0))

    print(cnt)

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com