Techbrad

[백준] 1966번 프린터 큐 - 파이썬 본문

Programming/코딩테스트

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

brad.min 2024. 2. 18. 17:06
반응형
 

1966번: 프린터 큐

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

www.acmicpc.net

 

문제 접근 방법

일반적인 구현 문제로 큐의 순서를 바꾸더라도 처음의 인덱스 값을 기억해야하는 것이 주요한 점 같다. 처음 상태의 인덱스를 기억하는 방법으로는 딕셔너리, 튜플 등 다양한 자료 구조 방법을 사용할 수 있지만 나는 튜플을 사용했다. 

 

제출코드

from collections import deque

T = int(input())
for _ in range(T):
    N, M = map(int, input().split())
    print_pool = deque([(i, int(p)) for i, p in enumerate(input().split())])

    answer = 0
    while True:
        # 현재 상태에서 가장 큰 수를 찾는다.
        max_ = max(print_pool, key=lambda x: x[1])
        # 가장 큰수와 큐의 맨 앞에 있는 수를 비교해서 다르면 순서를 바꾼다.
        if max_[1] != print_pool[0][1]:
            print_pool.append(print_pool.popleft())
        # 가장 큰수와 큐의 맨 앞에 있는 수가 같다면 찾으려는 인덱스의 값인지 확인한다.
        elif max_[1] == print_pool[0][1]:
            # 찾으려는 인덱스이면 answer+=1 하고 while를 break
            if max_[0] == M:
                print_pool.popleft()
                answer +=1
                break
            # 그렇지 않으면 큐의 맨앞의 값을 pop한다.
            else:
                print_pool.popleft()
                answer += 1
    print(answer)

 

반응형