[JavaScript]プログラマー残業指数LEVEL 3


問題のソース
function solution(n, works) {
    const copyWorks = [...works].sort((a, b) => b - a);
    let max = copyWorks[0];
    
    while (n > 0) {
        for (let i=0; i<copyWorks.length; i++) {
            if (max === copyWorks[i]) {
                copyWorks[i] -= copyWorks[i] > 0 ? 1 : 0;
                n--;
            }
            if (!n) break;
        }
        
        max--;
        if (!max) break;
    }
    
    return copyWorks.reduce((acc, cur) => acc + Math.pow(cur, 2), 0);
}
に答える
ポイントは、最初のworks配列の最大値を格納し、ドアの周りに最大値を順次減算する.
(whileは、文のfor文で最大値と同じ作業を1つずつ削除します.)
振り返る
最初にwhileゲートを回した時にMax値を探したらタイムアウト
以上の説明に従って、for文を迂回して複数のmax値を削除できます!