본문 바로가기

프로그래밍/알고리즘

[방학의 PS] 프린터 큐 - BOJ_1966

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

큐 문제인 듯 큐 문제 같지 않은 문제입니다.

 

저는 처음에 우선순위 큐 문제로 내용을 착각하고 이를 통해 구현해보려다 삽을 좀 푼 뒤, 근본적인 구현으로 다시 돌아갔습니다. 덕분에 시간을 너무 많이 허비했네요ㅠㅠ

 

큐의 핵심은 FIFO(First In, First Out)입니다만, 이것만으로는 풀기 어려운 문제였습니다. 문제에서 주어지는 논리를 만족하는 자료구조를 생각한 뒤, 어떻게 하면 중복되는 요소들을 처리할 것인가가 핵심이 되는 문제였지요. 제 코드는 다음과 같습니다만, 더 좋은 코드가 분명 있을 것입니다.

 

t = int(input())
for _ in range(t):
n, idx = map(int, input().split())
arr = list(map(int, input().split()))
printerQueue = []
for i in range(n):
printerQueue.append([i, arr[i]])
target = arr[idx]
cnt = 0
while 1:
if printerQueue[0][1] < max(arr):
printerQueue.append([printerQueue[0][0], printerQueue[0][1]])
del printerQueue[0]
else:
cnt += 1
if printerQueue[0] == [idx, target]:
print(cnt)
break
else:
arr.remove(max(arr))
del printerQueue[0]