백준 1966 - 프린터 큐 (Python)
2023. 7. 28. 05:43ㆍ알고리즘
문제
https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
풀이
for _ in range(int(input())):
n,m = map(int,input().split())
d = list(map(int,input().split()))
cnt = 0
while True:
if max(d) == d[0]:
cnt += 1
if m == 0:
print(cnt)
break
m-=1
d.pop(0)
else:
d.append(d[0])
d.pop(0)
if m == 0:
m = len(d)-1
else:
m-=1
직접 큐를 만들어서 시뮬레이션을 해보면 값을 구할 수 있다.
처음에 문제를 풀 때 뒤쪽이 먼저인줄 알고 코드를 짰는데, 알고보니 앞에서 부터 인쇄를 진행하는 것이었다.
맨 앞의 문서가 가장 중요도가 높으면 제거하면서 cnt에 1을 더하고, 아니면 맨 뒤로 옮겨준다.
이 과정에서 목표로 하는 인덱스인 m을 알맞게 바꾸어주었다.
목표로 하는 인덱스가 맨 앞에 있고, 중요도도 가장 높으면 반복을 종료하고 cnt를 출력하는 방식이다.