말랑한 하루

[Programmers] 야근 지수 (Lv 3, JavaScript) 본문

문제풀이/Programmers

[Programmers] 야근 지수 (Lv 3, JavaScript)

지수는말랑이 2022. 12. 8. 18:19
반응형

[ 학습 내용 ]
문제 내용을 이해하지 못해 풀이를 참조했던 문제이다.

첫 접근을 입출력 예#1만을 참조하여 

아! 해당 작업량의 제곱근을 구해, 가장 가까운 큰 제곱근의 제곱값을 구하면 되는구나!

라고 생각하여 해멨다.

 

피로도는 제곱되므로 야근의 피로도를 최소로하기 위해선, 전체 작업을 하향평준화 해야한다.

작업량의 최대값을 Demi가 일할 수 있는 양만큼 1씩 빼주며 순환진행하면 전체적인 하향평준화가 된다.

[ 소스 코드 ]

function solution(n, works) {
    if (works.reduce((acc, cur) => acc + cur, 0) <= n) return 0;
    works.sort((o1, o2) => o2 - o1);
    while(n) {
        let max = works[0];
        for(let i=0; i<works.length; i++) {
            while(works[i] >= max) {
                works[i]--;
                n--;
            }
            if (!n) break;
        }
    }
    return works.reduce((acc, cur) => acc + Math.pow(cur, 2), 0);
}
반응형
Comments