[백준] 1966번 프린터 큐(python)

마뇽미뇽·2025년 9월 10일

알고리즘 문제풀이

목록 보기
160/168

1. 문제

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

2. 풀이

리스트의 최고값인 우선순위를 뽑아낼때마다 m값이 감소하는 형식으로 구현해야하는데 그러다보면 결국 m < 0이 되는 경우에 m 값을 다시 재설정하지 않아서 시간이 오래걸렸다. 아무리 고민해도 잘 안풀려
https://thisismi.tistory.com/entry/%EB%B0%B1%EC%A4%80-1966%EB%B2%88-%ED%94%84%EB%A6%B0%ED%84%B0-%ED%81%90-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A0%95%EB%8B%B5-%EC%BD%94%EB%93%9C 님의 글을 참고하였다

3. 코드

import sys
from collections import deque

t = int(sys.stdin.readline())
for i in range(t):
    #   큐 크기, 필요로 하는 사이클
    n,m = map(int, sys.stdin.readline().split())
    q = deque(list(map(int, sys.stdin.readline().split())))

    cnt = 0
    #   큐를 돌면서
    while q:
        #   우선순위 첫번쨰
        maxN = max(q)
        #   현재 맨 첫번째 프린팅 되는 수
        front = q.popleft()
        #   한 사이클이 돌아갔다
        m -= 1

        #   뽑은 값이 최대값이면
        if front == maxN:
            #   순서가 올라감
           cnt += 1
            #   아직 뽑아야하는 사이클이 남았으면 더 진행하지만 만약 모두 뽑은경우라면
           if m < 0:
               #    값 출력하기
               print(cnt)
               break
        #   근데 만약 값이 아니라면
        else:
            #   다시 큐에 넣어주면서 큐 크기 유지해주기
            q.append(front)
            #   근데 만약 이미 돌아야하는 사이클을 다 돌았음에도 최대값읆 못찾았으면
            #   사이클 재설정이 필요함
            if m < 0:
                #   중요도가 더 높은 문서가 남아있으니 다시 돌아야 하므로
                #   맨 뒤로 이동해야 하므로 m == len(큐) - 1
                m = len(q) - 1```
profile
Que sera, sera

0개의 댓글