[アルゴリズム]プログラマ42587

7252 ワード

https://programmers.co.kr/learn/courses/30/lessons/42587?language=javascript
スタック/キューの問題を解決しました.
コード#コード#
この問題はqueue資料構造を用いて解決した.
印刷順序を決めるのは難しくないが、
特定のインデックスの印刷出力順序を求める部分が少しブロックされています.
そこで、targetIndex、printExcutedCount変数を使用して、私が監視する値currentIndexとこれまで印刷した印刷物の個数を計算し、while文を迂回します.
function solution(priorities, location) {
   const queue = [...priorities];
    let topPriority = Math.max(...queue);
    
    let targetIndex = location;
    let printExcutedCount = 0;
    
    while(queue.length !== 0){
        if(queue[0] === topPriority) {
            queue.shift();
            topPriority = Math.max(...queue);
            printExcutedCount++;
             if(targetIndex === 0){
                break;
             }else{
                targetIndex--;
             }
        }else{
            const target = queue.shift();
            queue.push(target);
            if(targetIndex === 0){
                targetIndex = queue.length - 1;
            }else{
                targetIndex--;
            }
        }
    }
    
    return printExcutedCount;
}
私が解決する方法の中で重要なのは
 if(queue[0] === topPriority) {
            queue.shift();
            topPriority = Math.max(...queue);
            printExcutedCount++;
             if(targetIndex === 0){
                break;
             }else{
                targetIndex--;
             }
        }
そうですね.
最も優先度の高い印刷をtopPriorityに配置します.
現在のキューの0番目のインデックスと値を比較して出力できるかどうかを確認します.
出力先の場合はprintExcutedCount値に1を加算し、targetIndex(監視する印刷物)も0時に運転を終了し、printExcutedCountに戻ります.
思ったより難しい問題ではありませんでしたが、久しぶりにやってしまい少し時間がかかりました.