각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사 후 회사의 예산에 맞춰 물품을 지원해 줄때 최대한 많이 지원해 줄 수 있는 부서의 수를 구하는 것이다.
입출력의 예
d | budget | result |
---|---|---|
[1, 3, 2, 5, 4] | 9 | 3 |
[2, 2, 3, 3] | 10 | 4 |
같은 예산(budget)으로 가장 많은 부서에게 지원을 하기 위해서는 적은 금액부터 지원을 해줘야 된다고 생각했다. 그래서 먼저 d를 sort를 이용해서 올림차순으로 바꿔주었다.
d.sort((a, b) => a - b);
그 후 for문을 이용해서 적립된 금액(sava)가 예산(budget)을 넘어가면 break를 실행하고 아니면 count에 1을 더하게 구현하였다.
그 후 count를 return해주었다.
let count = 0;
let save = 0;
for(let i = 0; i < d.length; i++){
save += d[i];
if(save > budget) break
else count+=1
}
return count;
결과는 정답으로 나왔다.
for이 d의 길이만큼 돌아가기 때문에 내장 함수를 사용해도 될 것 같은 느낌이 들었다.
let count = 0;
let save = 0;
d.sort((a, b) => a - b).forEach(item => {
save += item;
save <= budget && (count+=1);
})
return count;
메서드 체이닝을 통해 d를 sort(올림차순)한 후 바로 forEach()를 통해 최대 지원 부서 수를 구했다.
let save = 0;
return d
.sort((a, b) => a - b)
.reduce((acc, cur) => {
save += cur;
save <= budget && (acc += 1);
return acc;
}, 0);
reduce를 사용하면 저장공간을 가질 수 있어서 변수를 하나 줄일 수 있고, 바로 reture을 할 수 있다.