Algorithm Study/Python

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

728x90
반응형

Silver III

# 1966 프린터 큐

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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

풀이

from collections import deque

# 테스트 케이스 T개
T = int(input())

for i in range(T):
    N, M = map(int, input().split())
    q = deque(list(map(int, input().split())))
    idx = deque(list(range(N)))
    cnt = 0

    # 최종적으로 M이 제거될 때까지 while문 반복
    while M in idx:

        # 0번 째 인덱스에 q의 가장 큰 값이 위치하도록 조정
        while max(q) != q[0]:
            q.append(q.popleft())
            idx.append(idx.popleft())

        # 조정이 완료되었을 때, 0번 째 인덱스 값 제거하면서 cnt+1
        cnt += 1 
        q.popleft()
        idx.popleft()

    # M이 제거되었을 때 cnt 값 확인
    print(cnt)

 

후기

  • 풀기 전까지 진짜 어려웠는데 풀고 나니 왜 이렇게 어려워했는지 이해 안되는 문제.. ㅎㅎ

  • 처음 주어지는 값의 인덱스를 활용해야 한다. 인덱스 위치 값을 활용하기 위해서 idx라는 덱을 하나 만들고 q 변화에 따라서 idx 값 또한 변경시켰다.