[Programmers]Stack/Queue-プリンタ(Python)
ソース
一般的なプリンタでは、必要な印刷順に印刷されます.したがって、重要なドキュメントは後で印刷される可能性があります.この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます.
印刷待ちリストから、先頭の文書(J)を取り出す. 残りの個の印刷対象リストにJよりも重要なドキュメントがある場合は、Jを印刷対象リストの最後に配置します. でなければJを印刷します. 例えば、4つの文書(A、B、C、D)が印刷対象リストに順次存在し、重要度が2 1 3 2の場合、CD A Bの順に印刷される.
私が印刷を要求したドキュメントが何回目の印刷なのか知りたいです.上記の例では、Cは1位、Aは3位である.
ソリューション関数を作成してください.パラメータが現在のキュー・リスト内のドキュメントの重要度のソート順と、印刷を要求したドキュメントが現在のキュー・リスト内にある場所を指定した場合、印刷を要求したドキュメントの何回目の印刷かを返します.
現在の待機リストには、1つ以上の100個のドキュメントが含まれています. 印刷ジョブの重要性は1から9で表され、数字が大きいほど重要である. の位置の値は0より大きく(現在のキューリストのタスク数-1)、キューリストの先頭に0、2番目の位置に1と表示されます.
prioritieslocationreturn[2, 1, 3, 2]21[1, 1, 9, 1, 1, 1]05
例1
問題の例は次のとおりです.
例2
6つの文書(A、B、C、D、E、F)は、印刷対象リストにおいて、重要度が1 1 1 1 9 1 1 1 1であり、C D E F A Bの順に印刷される.
現在の順序のドキュメントよりも重要かどうかを決定するためにany関数を使用します.上記のコードと同様にanyでfor文で比較することもできます.
Stack/Queue:プリンタ[Lv 2]
問題の説明
一般的なプリンタでは、必要な印刷順に印刷されます.したがって、重要なドキュメントは後で印刷される可能性があります.この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます.
印刷待ちリスト
私が印刷を要求したドキュメントが何回目の印刷なのか知りたいです.上記の例では、Cは1位、Aは3位である.
ソリューション関数を作成してください.パラメータが現在のキュー・リスト内のドキュメントの重要度のソート順と、印刷を要求したドキュメントが現在のキュー・リスト内にある場所を指定した場合、印刷を要求したドキュメントの何回目の印刷かを返します.
せいげんじょうけん
I/O例
prioritieslocationreturn[2, 1, 3, 2]21[1, 1, 9, 1, 1, 1]05
I/O例説明
例1
問題の例は次のとおりです.
例2
6つの文書(A、B、C、D、E、F)は、印刷対象リストにおいて、重要度が1 1 1 1 9 1 1 1 1であり、C D E F A Bの順に印刷される.
Solution
説明する
from collections import deque
def solution(priorities, location):
answer = 0
priorities = deque(priorities)
while priorities:
if priorities[0] == max(priorities):
priorities.popleft()
answer += 1
if location == 0:
break
location -= 1
else:
priorities.append(priorities.popleft())
if location == 0:
location = len(priorities) - 1
else:
location -= 1
return answer
Dequeを使用して、一番前の要素の重要度が最も高いことを決定し、これが私が望んでいるドキュメントであるかどうかを追跡する方法で実現します.結果
Best Code
from collections import deque
def solution(priorities, location):
queue = deque((i, p) for i, p in enumerate(priorities))
answer = 0
while True:
cur = queue.popleft()
if any(cur[1] < q[1] for q in queue):
queue.append(cur)
else:
answer += 1
if cur[0] == location:
break
return answer
列挙を使用して、最初の位置と重要度をtupleに設定し、サブリスト(deque)にします.これにより、ドキュメントを追跡する必要がなくなり、tupleの最初の要素値を決定するだけで済みます.現在の順序のドキュメントよりも重要かどうかを決定するためにany関数を使用します.上記のコードと同様にanyでfor文で比較することもできます.
Reference
この問題について([Programmers]Stack/Queue-プリンタ(Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@deannn/Programmers-StackQueue-프린터-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol