몇 번째로 출력되는지 알아야 할 원소의 초기 인덱스인 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)
'알고리즘' 카테고리의 다른 글
[백준][Python 파이썬] 7576번 토마토 (2) | 2023.12.01 |
---|---|
[백준][Python 파이썬] 1927번 최소 힙 (2) | 2023.11.30 |
[백준][Python 파이썬] 1874번 스택 수열 (0) | 2023.11.28 |
[백준][Python 파이썬] 1764번 듣보잡 (2) | 2023.11.24 |
[백준][Python 파이썬] 11723번 집합 (0) | 2023.11.24 |