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가 최대한 많은 부서에 예산을 나눠준 경우의 수이다.