[백준 1966] 프린터 큐 / 파이썬

권한·2025년 12월 30일

BOJ

목록 보기
29/40

큐를 이용해서
1. Queue의 가장 앞에 있는 문서의 중요도 확인
2. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치. 그렇지 않다면 바로 인쇄
의 조건에 따른다.

아이디어

처음엔 인덱스로 찾으려 했던 M위치의 문서를 추적하려고 했는데, 아무래도 지금 내 실력으로는 역부족인건지 못하는 건진 모르겠지만 구현이 안되어서 애초에 queue에 저장할 때 내가 찾는 문서인지를 우선순위와 함께 튜플형태로 같이 저장하기로 했다.

queue.append((temp[i], i == M))

cur = queue.popleft()로 첫번째 큐의 값을 뽑고, any()를 이용하여 cur[0] < q[0]을 만족하는 값이 하나라도 있다면 큐의 마지막에 넣고, 아니라면 순서에 +1을 한다. 찾는 값이 맞다면 순서를 출력한다.

any()는 ()안에 들어가는 조건식이 하나라도 True라면 True가 된다.

from collections import deque
import sys

input = sys.stdin.readline

for _ in range(int(input())):
    N, M = map(int, input().split())
    temp = list(map(int, input().split()))
    queue = deque()

    for i in range(N):
        queue.append((temp[i], i == M))
    
    count = 0

    while True:
        cur = queue.popleft()

        if any(cur[0] <  q[0] for q in queue):
            queue.append(cur)
        else:
            count += 1
            if cur[1]:
                print(count)
                break
profile
티스토리로 옮김

0개의 댓글