문제
https://www.acmicpc.net/problem/1966
풀이
https://github.com/nowChae/algorithm/blob/master/%EB%B0%B1%EC%A4%80/Silver/1966.%E2%80%85%ED%94%84%EB%A6%B0%ED%84%B0%E2%80%85%ED%81%90/%ED%94%84%EB%A6%B0%ED%84%B0%E2%80%85%ED%81%90.py


중요도에 따라 인쇄 여부를 결정하는 문제였다. 중요도를 담은 리스트와 순서를 담은 리스트 두개를 선언하여 문제를 해결하였다. 큐 자료구조를 활용하기 위해서 deque 라이브러리를 사용해 구현해주었다.
만약 중요도 리스트에 가장 첫번째 값이 중요도가 가장 크다면, 그 값은 중요도 리스트, 순서 리스트에서 모두 popleft 해주었다. 이때 순서 리스트의 첫 번째 값이 찾고자 하는 순서의 값이라면 해당 순서(count)를 출력해주고 while문을 빠져나오도록 해주었다. 만약 찾고자 하는 값이 아니라면 count 값을 증가해주었다.
만약 첫번째 값의 중요도가 가장 큰 값이 아니라면 중요도 리스트와 순서 리스트의 맨 첫번째 값을 popleft하고 다시 그 값들을 각각 append 해주었다.
중요도라는 조건이 하나 추가되어서 그렇지, queue라는 자료구조를 알고 deque 모듈을 사용하면 간단하게 구현할 수 있었던 것 같다.
from collections import deque
import sys
test = int(sys.stdin.readline())
for _ in range(test):
N, K = map(int,sys.stdin.readline().split())
importance = deque(list(map(int, sys.stdin.readline().split())))
queue = deque([i for i in range(N)])
count = 1
while True:
maxImportance = max(importance)
if importance[0] == maxImportance:
if queue[0] == K:
print(count)
break
else:
importance.popleft()
queue.popleft()
count += 1
else:
i = importance.popleft()
q = queue.popleft()
importance.append(i)
queue.append(q)