[白俊]1966号:プリンタキュー
問題の内容によって、キューにpushやpopを1つずつ適用すると、またタイムアウトが発生するようなので、別の方法を考えることにしました.
キューの一番前のアイテムを最後に送信し、最後に送信...練習を重ねて、最終的にQは初めてと同じになります.項目間に位置変化はありません.
巡回の立場に立ってこの問題を考えると、Qを最初から最後まで巡回し、最初の繰り返しに戻るようなものだ.
優先度キューを受信すると、各優先度アイテムの数も受信されます.
最大優先度9から1の降順で、優先度のドキュメント数が完了するまでキューを繰り返し、これまでのドキュメント数(count)に増やします.
ターゲットによる優先度の計算が行われると、現在のインデックスとターゲットインデックスが同じ場合、count+1が出力されます.
T = int(input())
for _ in range(T):
N, M = map(int, input().split())
priority = [0] * 10
queue = list(map(int, input().split()))
for i in queue:
priority[i] += 1
idx = 0
count = 0
isBreak = False
for i in range(1, 10):
while priority[10 - i] > 0:
if idx == M and 10 - i == queue[M]:
print(count + 1)
isBreak = True
break
if queue[idx] == 10 - i:
priority[10 - i] -= 1
count += 1
idx = (idx + 1) % N
if isBreak:
break
Reference
この問題について([白俊]1966号:プリンタキュー), 我々は、より多くの情報をここで見つけました https://velog.io/@js43o/백준-1966번-프린터-큐テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol