본문 바로가기
백준

프린터 큐 - 1966번

by 청원뿔세포 2022. 10. 24.

데큐를 이용한다.

입력받은 값들을 데큐 1개, 배열 1개에 저장한다.

배열에 저장했던 값들을 크기가 큰 순서대로 정렬한다.

배열에 있는 값들은 이제 우선순위를 의미한다.

데큐에서 우리가 찾고자하는 인덱스에 있었던 것이 언제 나오는지 알아야 한다.

popleft()로 하나를 꺼내어 우선순위를 비교해보고 append하여 나중에 다시 확인할지, 꺼낼지 판단해준다.

popleft()를 하게되면 우리가 찾고자하는 것의 인덱스가 -1 감소하거나 데큐의 가장 끝에 위치하게 된다.

찾고자하는 것의 인덱스를 의미하는 m의 값을 움직이며 답을 구해준다. (m==0일 때, 우선순위를 만족하면 된다.)

from collections import deque
import sys
t = int(input())
for _ in range(t):
    n,m = map(int,sys.stdin.readline().split())
    a = list(map(int,sys.stdin.readline().split()))
    q = deque(a)
    a.sort()
    a.reverse()
    idx = 1
    while q:
        c = q.popleft()
        if c == a[idx-1]:
            if m == 0:
                print(idx)
                break
            n-=1
            idx+=1
            pass
        else:
            q.append(c)
        if m == 0:
            m = n-1
        else:
            m-=1

'백준' 카테고리의 다른 글

덱 - 10866번  (0) 2022.10.26
큐 - 10845번  (0) 2022.10.26
통계학 - 2108번  (0) 2022.10.24
블랙잭 - 2798번  (0) 2022.10.22
스택 수열 - 1874번  (0) 2022.10.20

댓글