파이썬 백준 1966번
실버3
https://www.acmicpc.net/problem/1966
문제 보기
문제 풀기
최댓값을 저장하고 deque 제일 왼쪽한 값을 뽑아 저장.
제일 왼쪽 원소가 없어 졌기에 위치 M 의 값을 하나 줄여줌.
뽑아 저장된 front 숫자가 best 값과 같으면 프린터가 작동하기에 count 를 하나 올려줌.
while 이 도는 동안 best == front 경우에 대해 M 이 0 보다 작아지면 그때의 위치는 알고자 지정 프린트 문서의 숫자이기 때문에 결과 count 도출.
그렇지 않은, 뽑아서 저장된 front 숫자는 제일 뒤로 옮기기 위해 append(front) 사용.
while 이 도는 동안 아직 front 값 뒤에는 best 값이 존재하기 때문에 지정 프린트 문서는 제일 뒤로 이동하면서 그 위치 M 값도 제일 마지막 숫자로 변경.
코드 보기
import sys
inputdata = sys.stdin.readline
from collections import deque
test_nums = int(inputdata().strip())
for _ in range(test_nums):
N, M = map(int, inputdata().split())
docs_dq = deque(list(map(int, inputdata().split())))
count = 0
while docs_dq:
best = max(docs_dq)
front = docs_dq.popleft()
M -= 1
if best == front:
count += 1
if M < 0:
print(count)
break
else:
docs_dq.append(front)
if M < 0:
M = len(docs_dq) - 1
# 3
# 1 0
# 5
# 4 2
# 1 2 3 4
# 6 0
# 1 1 9 1 1 1
# 1
# 2
# 5