[프로그래머스 | Javascript] 예산

박기영·2022년 9월 12일
0

프로그래머스

목록 보기
37/159
post-custom-banner

solution

function solution(d, budget) {
    // 가장 작은 예산이 필요한 곳부터 제거해나가면
    // 최대한 많은 부서에 예산을 사용할 수 있다!!!
    d.sort((a, b) => a - b);
    
    while(budget > 0){
        let count = 0;
        
        for(let i = 0; i < d.length; i++){
            // 남은 예산이 부서에서 요구하는 예산보다 클 경우에는
            if(budget - d[i] >= 0){
                // 가장 적은 예산이 필요한 부서부터 예산을 주기 시작
                budget -= d[i];
                
                // 예산을 준 부서의 숫자를 증가시킨다.
                count++;
            } else {
                // 남은 예산이 부서에서 요구하는 예산보다 적을 경우에는
                // break를 해서 연산을 멈춘다.
                break;
            }
        }
        
        return count;
    }
}

최대한 많은 부서에 예산을 주는 것 = 가장 적은 예산이 필요한 곳부터 제거해 나가는 것
이 것을 이해하면 굉장히 쉽게 풀 수 있다.

d를 오름차순 정렬해서 앞쪽에 나오는 원소가 가장 적은 예산을 필요로 하는 부서가 되게 만들어준다.
예산에서 요구 예산을 빼나가면서
남은 예산이 요구 예산보다 적어지는 순간 연산을 종료한다.
그 때의 count가 최대한 많은 부서에 예산을 나눠준 경우의 수이다.

profile
나를 믿는 사람들을, 실망시키지 않도록
post-custom-banner

0개의 댓글