Koala - 5기/기초 알고리즘 스터디

[백준|python] 1966번 프린터 큐

jeonyoungseo 2022. 1. 26. 08:38

 

N은 덱에 들어 있는 원소의 개수이고, M은 내가 목표로 하는 값의 위치이다. 

계속해서 deque의 맨 앞의 원소를 다른 원소들과 비교했을 때 , 더 큰 원소가 없을 경우에는 popleft해주고 N,M을 하나씩 줄여주면 되고, remove했으므로 Remove를 1씩 늘인다. 더 큰 원소가 있을 경우에는 popleft해준 걸 뒤로 append시키며, M만 하나 줄인다. 

이걸 M이 -1이 될 때까지 (즉 내가 목표하는 값이 드디어 pop 되었을 때) 한 후 remove 변수값을 구하면 된다.

 

from collections import deque
import sys
input=sys.stdin.readline

t=int(input())
for i in range(t):
    N,M=map(int, input().split())
    Remove=0
    List=deque(map(int,input().split()))
    if N==1:
        print(1)
    else:
        while True:
            if M==-1:
                break
            if List[0]!=max(List): #더 큰게 하나라도 있으면
                    x=List.popleft()
                    List.append(x)
                    if M==0:
                        M+=(N-1)
                    else:
                        M-=1
            else:
                List.popleft()
                Remove+=1
                M-=1
                N-=1
                continue
            
        print(Remove)