プログラムプリンタ


<テストプログラマコード>
プリンタ

問題の説明
>
一般的なプリンタでは、必要な印刷順に印刷されます.したがって、重要なドキュメントは後で印刷される可能性があります.この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます.
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
3. 그렇지 않으면 J를 인쇄합니다.![]

つまり、優先順位の周りに位置値が何位になるかということです.ex)位置2の配列は3で、一番高い数字なのでreturnが1位です.
コード#コード#
def solution(priorities, location):

    # 1 .Q를 만든다
    printer = [(i,p) for i,p in enumerate(priorities)]
    turn = 0
    while printer:
        job = printer.pop(0)
        
        #2. 나보다 중요한  job이 있으면 뒤에 넣는다
        if any(job[1] < other_job[1] for other_job in printer):
            printer.append(job)
        else:
            turn +=1
            #3. 너가 제일 중요하다면 수행하고 location을 비교한다.
            if job[0] == location:
                break


    return turn

print (solution([2,1,3,2],2))
問題の説明
  • 優先順位を2 Dパターンに変更
    [(i,p) for i,p in enumerate(priorities)] //(0,2),(1,1),(2,3),(3,2)
    列挙を知りたい
  • While Printer<=>Whilre True:同じ言語
  • job = printer.pop(0)//(0,2)
  • if any(job[1] < other_job[1] for other_job in printer)://other_job = (1,1),(2,3),(3,2)//job = (0.,2)//other_job[1] = 1,3,2 //job [1] = 2
    //anyを挿入すると、2より大きいFalseが返されます.
    //printer.プリンタアレイの後ろにappend(ジョブ)=>を追加(1、3、2、2)
    了解any
  • turn+=1//後順位、追加+1
    job[0]=location://このようにドアの周りを歩くと、最終的にはlocationの必要な位置での優先度がわかります.
  • <その他のコード>
    def solution(priorities, location):
        answer = 0
        while True:
            max_num = max(priorities) #3
            for i in range(len(priorities)): # 4
                if max_num == priorities[i]: #  3 = 2 
                    answer+=1
                    priorities[i] = 0
                    max_num = max(priorities)
                    if i == location:
                        return answer
    <コードの説明>
    上記の問題と似ていますが、違いは
  • は最大値を求め、優先度[i]を使用して位置値
  • を検索する.
  • と最大値が表示された場合は、0に初期化し、最大値を変更し続けます.
  • の最大値が0に初期化されるたびに、答えは+=1になります.