프린터 큐_1966번
코드
import sys
from collections import deque
input = sys.stdin.readline
deq = deque()
t = int(input())
for _ in range(t):
answer = 0
n, m = map(int, input().split()) # m : index
deq = deque(map(int, input().split()))
while deq:
if deq[0] == max(deq):
deq.popleft()
answer += 1
if not m: # m==0
print(answer)
break
else:
deq.rotate(-1)
if m: # m!=0
m -= 1
else:
m = len(deq)-1
풀이노트
- input :
- n : 문서의 개수, m : 궁금한 것(index 가 입력되기 때문에 0부터 시작)
- deq : 문서의 중요도
- queue 문제에서는 성능이 우수한 deque 를 사용함
if deq[0] == max(deq) : {} else {}
- 중요도에 따라 deq 를 돌리거나 deq[0]을 뽑음
if
: 중요도가 가장 높은 것이 deq[0] 에 있을 경우
- deq 에서 뽑고, answer++
if not m
: m==0 인 경우 문제에서 정답이 출력되므로 더이상 while문을 돌릴 필요가 없으므로 break 함
else
: deq.append(deq.popleft())
== deq.rotate(-1)
if m : {} else : {}
- m 의 값을 변경하는 것
- 문제에서 요구하는 것은 m 위치에 있는 값이 몇번째에 뽑히는가이므로, deq가 재배치될 때마다 m의 값은 변경됨.
- m이 -1이 되면 안되므로 else 문을 추가함
소요시간 : 30분
- 6개월 전에 풀었다가 실패한 코드가 있는데, 6개월 사이에 실력이 향상된 것 같아 뿌듯하다!