본문 바로가기
알고리즘/자료구조

[백준][Python] 1966번 프린터 큐

by 임짠짠 2022. 2. 8.
반응형
 

1966번: 프린터 큐

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

www.acmicpc.net

코드

 

from collections import deque

num = int(input())
for i in range(num):
    cnt = 0
    N, M = map(int,input().split())
    imp = deque(list(map(int,input().split())))
    
    while len(imp) > 0:
        maxi = max(imp)
        if imp[0] == maxi:  # 처음 원소값이 최댓값이면
            imp.popleft()
            if M == 0:  # pop된 수가 목표 수이면
                cnt += 1
                break
            else:
                cnt += 1
                M -= 1  # 한칸씩 당겨짐
        else:
            a = imp.popleft()
            imp.append(a)
            if M == 0:
                M += len(imp) - 1  # 목표 수가 최대값이 아니면 맨 뒤로 넣어줌
            else:
                M -= 1 
    print(cnt)

 

설명

 

목표한 수가 몇번째에 위치하는지 알려주는 수인 M의 값을 변하는 상황에 따라 바꿔주었다.

 

만약 M이 0이 아니고 앞의 숫자가 pop이 되었을 때는 (M-1)을 해주어 한 칸을 당겨주었다. cnt는 0번째 원소가 최댓값과 일치할 때에 1씩 증가시켰다.

 

M이 0일 때 즉, 다음으로 pop 될 순서가 되었을 때 imp[M]의 값이 최댓값이 아니면 덱의 가장 마지막에 넣어주었고 M의 값을 (덱의 길이 - 1)로 바꿔주었다. 만약 imp[M]의 값이 최대가 맞으면 그때까지 인쇄된 문서의 수인 cnt에 1을 더해 정답을 출력해준다. 

반응형

댓글