プログラマーLv.2-プリンタ

5564 ワード

問題の説明
一般的なプリンタでは、必要な印刷順に印刷されます.したがって、重要なドキュメントは後で印刷される可能性があります.この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます.
印刷待ちリスト
  • から、先頭の文書(J)を取り出す.
  • 残りの
  • 個の印刷対象リストにJよりも重要なドキュメントがある場合は、Jを印刷対象リストの最後に配置します.
  • でなければJを印刷します.
  • 実は上の文章はあまり理解していません.しかし、私だけが理解していないわけではありません.
    私のような理解できない人のために詳しく説明してくれた.
    次の文章をゆっくり読んでほしい.
  • 最初の印刷対象リスト.
    -> (A,2) (B,1) (C,3) (D,2)
    ->印刷完了:
  • なし
  • 一番前の文書(A,2)を取り出して条件を適用する
    残りの印刷対象リストには、より重要なドキュメント(C、3)が存在するため、最後に送信される.
    -> (B,1) (C,3) (D,2) (A,2)
    ->印刷完了:
  • なし
  • 一番前の文書(B,1)を取り出し、条件を適用する
    残りの印刷対象リストには、より重要なドキュメント(C、3)が存在するため、最後に送信される.
    -> (C,3) (D,2) (A,2) (B,1)
    ->印刷完了:
  • なし
  • 一番前の文書(C,3)を取り出して条件を適用する
    他の印刷対象リストには、より重要なドキュメントがありません.
    -> (D,2) (A,2) (B,1)
    ->印刷完了:(C,3)
  • 一番前の文書(D,2)を取り出して条件を適用する
    他の印刷対象リストには、より重要なドキュメントがありません.
    -> (A,2) (B,1)
    ->印刷完了:(C,3)(D,2)
  • 一番前の文書(A,2)を取り出して条件を適用する
    他の印刷対象リストには、より重要なドキュメントがありません.
    -> (B,1)
    ->印刷完了:(C,3)(D,2)(A,2)
  • 一番前の文書(B,1)を取り出し、条件を適用する
    他の印刷対象リストには、より重要なドキュメントがありません.
    ->印刷完了:(C,3)(D,2)(A,2)(B,1)
  • の印刷順序はCD A Bである.
    (プログラマTypebiコメント)
  • このようにループが所望の位置に達すると、コードは順序を返すように記述される必要がある.
    最初は順番を守っていましたが、どのように順番を印刷するのか分からず、少し苦労しました.
    それからいろいろな面から消して、何度も書いて、答えが出ました.

    解答方法

  • は、まず、プリンタの出力内容を含む優先リストと記録順のカウンタとを組み合わせて、新しいリストに追加する.これにより、今後の問題で目的のインデックスが見つかります.
  • で述べたように、リスト内の優先度数が最大値と異なる場合、リスト内の優先度を前から1つずつ取り出します.
  • が最大値に等しい場合は、リストのインデックスが問題の領域設定と同じであるかどうかを確認し、異なるタグを順番に追加および出力のみとしてマークします.
  • 質問のロケと同じであれば、これまで行ってきた順番に返信します.
  • リストではDQの機能を使用できますので、importにロードしていません.
    Tip. リスト内のpop()がパラメータとして必要なインデックス数を追加すると、インデックスは削除されます.これはハチミツです.

    解答コード

    def solution(priorities, location):
        d = []
        cnt = 0 # 각 프린터할 것들의 인덱스
        tmp = 0 # 최댓값 변수
        for i in priorities:
            d.append((cnt, i))
            cnt += 1
        
        result = 0 # 출력된 순서
        while len(d) != 0: # d의 원소들이 없어질때까지 돌아감
            tmp = 0
            for i in d:
                if tmp < i[1]:
                    tmp = i[1]
            check = d[0]
            if check[1] < tmp:
                d.pop(0)
                d.append(check)
            else:
                result += 1
                if check[0] == location: # 원했던 로케이션에 맞는 인덱스가 출력 될 시 순서 리턴
                    return result
                d.pop(0) # 그게 아니면 순서 증가시키고 pop()