백준 1966 - 프린터 큐 (Python)

2023. 7. 28. 05:43알고리즘

문제

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

 

1966번: 프린터 큐

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

www.acmicpc.net

풀이

for _ in range(int(input())):
    n,m = map(int,input().split())
    d = list(map(int,input().split()))
    cnt = 0
    while True:
        if max(d) == d[0]:
            cnt += 1
            if m == 0:
                print(cnt)
                break
            m-=1
            d.pop(0)
        else:
            d.append(d[0])
            d.pop(0)
            if m == 0:
                m = len(d)-1
            else:
                m-=1

직접 큐를 만들어서 시뮬레이션을 해보면 값을 구할 수 있다.

처음에 문제를 풀 때 뒤쪽이 먼저인줄 알고 코드를 짰는데, 알고보니 앞에서 부터 인쇄를 진행하는 것이었다.

맨 앞의 문서가 가장 중요도가 높으면 제거하면서 cnt에 1을 더하고, 아니면 맨 뒤로 옮겨준다.

이 과정에서 목표로 하는 인덱스인 m을 알맞게 바꾸어주었다.

목표로 하는 인덱스가 맨 앞에 있고, 중요도도 가장 높으면 반복을 종료하고 cnt를 출력하는 방식이다.