プログラマプリンタ


プリンタ
問題の説明
一般的なプリンタでは、必要な印刷順に印刷されます.したがって、重要なドキュメントは後で印刷される可能性があります.この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます.
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
3. 그렇지 않으면 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と表示されます.
  • 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の順に印刷される.
    concept
    この問題は、やはりソートが必要だと思います.locationという変数があるので、インデックスの位置も保存する必要があります.
    したがって、列挙を使用してインデックス情報を格納、ソートする必要がありますが、優先度が高い場合は前にインポートし、重要度が低い場合は最後に送信する必要があります.queueデータ型が思い出されます.
    キュー・データ型の中で最も優先度が高い場合、pop(0)はその要素が私が検索する要素かどうかを比較し、実行回数を出力すればよい.
    コードの単純性と効率を考慮してdequeを導入した.
    code
    # 프린터
    from collections import deque
    
    def solution(priorities, location):
        answer = 0
        deq = deque((j,i) for i, j in enumerate(priorities))
        while(deq):
            check = deq.popleft()
            if(deq and check[0] < max(deq)[0]):
                deq.append(check)
            else:
                answer+=1
                if(check[1] == location):
                    break
            
                
        return answer