プログラマプリンタ


質問する
重要度の高いドキュメントを先に印刷するプリンタがあります.
  • 待ち受けリストの一番前の文書(J)を待ち受けリストから取り出す.
  • 待機リストから取り出した文書(J)よりも重要な文書がある場合は、待機リストの最後の文書に移動する
  • それ以外の場合は、文書(J)を印刷し、何回目の印刷の
  • に戻る.
    優先度:印刷するリスト
    location:私が要求したドキュメントのインデックス
    印刷ジョブの重要性は1~9で、数字が大きいほど重要です
    priorities = [1,1,9,1,1,1] location = 0
    
    優先度の値が[A,B,C,D,E,F]の場合、
    ドキュメントA=優先度[0]のみを1の重要度で要求します.
    Aに戻るのは何回目の印刷ですか
    C-D-E-F-A-B順に印刷します.
    戻り値は5です.(Aは5位)
    コード#コード#
    List=印刷対象リスト
    document=私が要求したドキュメント
    count=印刷回数
    current=優先度の一番前のドキュメント
    function solution(priorities, location) {
      // 대기목록을 만든다
      // 인쇄목록.map((value, index) => 
      // {내가 요청한 문서의 인덱스는 location, value: value})
      let list = priorities.map((target, index) => ({
        document: index === location,
        value: target,
      }));
      
      let count = 0;
    
      while (priorities.length > 0) {
        // 맨 앞 문서를 대기목록에서 꺼내고
        let current = list.shift();
        // 중요도가 더 큰 문서가 있다면 현재문서를 대기목록의 맨 뒤로 보내기
        if (list.some((target) => target.value > current.value)) {
          list.push(current);
        } 
        // 현재 문서(맨 앞)보다 중요도가 높은 문서가 없다면
        else {
          // 카운트에 1을 더하고
          count++;
          // document: index === location(0) 이 참이라면 1을 리턴
          if (current.document) return count;
        }
      }
    }