プリンタ(Programmers 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と表示されます.
  • prioritieslocationreturn[2, 1, 3, 2]21[1, 1, 9, 1, 1, 1]05
    I/O例説明
  • 6個の文書(A,B,C,D,E,F)が印刷対象リストに並び、重要度は1 1 1 1 1 9 1 1 1 1 1 1 1であり、C D E F A Bの順に印刷される.
  • 🧑‍💻 解決策

  • インデックステーブルと値テーブルを生成し、dequeに結合して問題にアクセスしようとします.
  • のアプローチは正しいが、最終的には問題を解決できなかった.
  • 🧑‍💻 コード#コード#

    from collections import deque
    
    
    def solution_fail(priorities, location):
        answer = 0
        val_location = priorities[location]
    
        pop_idx = 0
        pop_pri = 0
    
        # 인덱스 deque 생성
        index = []
        for i in range(len(priorities)):
            index.append(i)
        index = deque(index)
    
        # deque of priorities
        p = deque(priorities)
    
        for i in range(len(priorities)):
            for j in range(i + 1, len(priorities)):
                if priorities[i] < priorities[j]:
                    pop_idx = index.popleft()
                    pop_pri = p.popleft()
                    index.append(pop_idx)
                    p.append(pop_pri)
                    break
    
        p = list(p)
        index = list(index)
    
        for i in range(len(priorities)):
            if index[i] == location and p[i] == val_location:
                answer = i + 1
    
        return answer
    
    
    def solution(priorities, location):
        answer = 0
        p = deque([(v, i) for i, v in enumerate(priorities)])
    
        while len(p):
            val = p.popleft()
            if p and max(p)[0] > val[0]:
                p.append(val)
            else:
                answer += 1
                if val[1] == location:
                    break
        return answer

    🧑‍💻 コード解析

  • を使用して、値にdequeを適用します.
  • valという変数にpopleft値を加えます.
  • の最大値で比較します.そうしないと、答えは1を加えます.
  • は、その値のインデックス値が位置に等しい場合、中断して返される.
  • 🧑‍💻 総評

  • 論理は正しいが、解けていない.
  • は、インデックスとその値を自由に使用することはできません.(有効に使用できません…)
  • もっと練習が必要だと感じました.