알고리즘
[백준][Python 파이썬] 1966번 프린터 큐
룰루루
2023. 11. 28. 18:30
몇 번째로 출력되는지 알아야 할 원소의 초기 인덱스인 M을 사용해서 해당 원소가 현재 몇 번째 인덱스에 있는지를 관찰하였다.
M의 경우 매 시행마다 앞으로 한 칸씩 당겨지므로 1씩 값을 제거하면서 그 값을 배열의 길이로 나눈 나머지를 사용하였다. 그래야 M의 값이 원소의 인덱스 범위를 벗어나지 않고 정확히 원소의 위치를 가리킬 수 있다.
또한 cnt 변수를 사용해서 원소를 Q에서 제거하고 출력할 때마다 cnt 값을 1씩 증가시켰다.
매 시행마다 Q(데크)에서 맨 앞의 원소를 뺀 뒤, 해당 원소의 뒤에 있는 원소들 중에서 해당 원소보다 큰 원소가 없으면 해당 원소를 제거했다.
만약 해당 원소보다 큰 원소가 뒤에 있었다면, popleft()로 제거했던 맨 앞의 원소를 다시 append()를 사용해서 배열의 맨 뒤에 넣어주었다.
import sys
from collections import deque
input = sys.stdin.readline
T = int(input())
for _ in range(T):
N, M = map(int, input().split())
Q = deque(list(map(int, input().split())))
if N == 1:
print(1)
else:
cnt = 0
while Q:
elem = Q.popleft()
if Q and max(Q) > elem:
Q.append(elem)
else:
cnt += 1
if M == 0:
break
M = (M-1) % len(Q)
print(cnt)