[프로그래머스] 예산

2020. 6. 16. 15:16프로그래머스/LEVEL 1

import java.util.*;

class Solution {
    public int solution(int[] d, int budget) {
        int answer = 0;
        
        Arrays.sort(d);
        
        for(int i=0; i<d.length; i++){
            if(budget-d[i]>=0){
                answer ++;
                budget -= d[i];
            } else{
                break;
            }
        }
        
        return answer;
    }
}

 

1. 최대한 많은 부서에게 예산을 할당해 주어야 하므로, 필요한 예산이 적은 부서부터 차례로 할당해 주어야한다.

2. 예산이 적은순으로 정렬을한다.

3. 주어진 예산에서 할당이 가능하면 할당하고 answer++

4. 할당을 하면 예산이 줄어드므로 해당 예산만큼 budget에서 빼주고 계속 진행한다.

5. 할당이 안되는 부서가 나오면 이후의 부서들도 모두 할당해줄 수 없으므로 break 해준다. (필요한 예산이 적은순으로 정렬했으므로 가능)

----------------------------------------------------------------------------------------------------------------------------

자바스크립트

function solution(d, budget) {
    var answer = 0;
    
    function num(a,b){
        return a-b;
    }
    
    d.sort(num);
    
    for (var i=0; i<d.length; i++) {
        if(budget>=d[i]){
            answer++;
            budget=budget - d[i];
           
        }else{
            break;
        }
    }
    return answer;
}

1.  처음에 d.sort()로 풀었을때 풀리지 않아 이유를 몰랐는데, 자바스크립트의 sort()함수는 기본적으로 아스키코드 값을 기준으로 정렬한다고 한다. 즉, 100 과 20을 정렬할때 2가 1 보다 아스키코드값이 크므로 100, 20 의 순서로 정렬이 된다.

2. 따라서 그냥 sort()로 사용하는 경우는 보통 문자열을 정렬할 때 이고, 숫자를 정렬할 때는 따로 정렬 기준을 함수로 넣어주어야 한다.