Programmers Stack&Queueプリンタ

1917 ワード

[スタック/キュー]プリンタ
Link: https://programmers.co.kr/learn/courses/30/lessons/42587
問題の説明
一般的なプリンタでは、必要な印刷順に印刷されます.したがって、重要なドキュメントは後で印刷される可能性があります.この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます.
印刷待ちリスト
  • から、先頭の文書(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と表示されます.
  • I/O例
    priorities location return
    [2, 1, 3, 2] 2 1
    [1, 1, 9, 1, 1, 1] 0 5
    I/O例説明
    例2
    6つの文書(A、B、C、D、E、F)は、印刷対象リストにおいて、重要度が1 1 1 1 9 1 1 1 1であり、C D E F A Bの順に印刷される.
    Code | Python
    def solution(priorities, location):
        answer_list = []
        index = []
        
        #index 리스트에 인덱스 넣어주기
        for i in range(len(priorities)):
            index.append(i)
    
        #prioirities 리스트가 0일때까지 루프 
        while len(priorities) > 0:
            #만약 첫번째 인덱스에 있는 priorities가 가장 크다면 answer_list에 그수의 인덱스를 push
            if priorities[0] == max(priorities):
                answer_list.append(index[0])
            #그렇지 않다면 가장뒤로 push
            else:
                index.append(index[0])
                priorities.append(priorities[0])
            priorities.pop(0)
            index.pop(0)
        
        #answer_list에서 location과 같은 수의 인덱스를 answer에 +1해준다.
        for i in range(len(answer_list)):
            if answer_list[i]==location:
                return i+1
    Output | Screen Shot