[JavaScript] 프로그래머스 야근 지수 LEVEL3

문제 출처

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 배열의 max값을 저장해놓고 while문을 돌면서 max를 하나씩 빼는 것이다.
(while문 안의 for문에서 max값과 같은 work들을 하나씩 빼준다.)

회고

처음에 while문을 돌면서 Max값을 한번씩 찾았는데, 이렇게 하면 시간초과남.
위의 풀이대로 하면 for문 돌면서 여러 개의 max값을 제거할 수 있다!

좋은 웹페이지 즐겨찾기