[プログラマー]-プリンタ(Python)


問題の説明


一般的なプリンタでは、必要な印刷順に印刷されます.したがって、重要なドキュメントは後で印刷される可能性があります.この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます.
印刷待ちリスト
  • から、先頭の文書(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例


    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の順に印刷される.
  • def solution(priorities, location):
    
        L = [i for i in range(len(priorities))]  # 인덱스 저장하는 리스트
    
        i = 0
        while priorities != sorted(priorities, reverse=True):
            if priorities[i] < max(priorities[i+1:]):
                # 인덱스 저장한 리스트와 원래 리스트 둘 다 
                # 맨 앞값을 빼서 리스트 뒤로 더해준다
                priorities.append(priorities.pop(i))
                L.append(L.pop(i))
            else:
                i += 1    # 만약 맨 앞이 가장 크다면 한칸 넘어간다
        return L.index(location)+1