문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12982
부서별 신청금액이 들어있는 배열 d, 전체 예산 budget을 메개변수로 가진다.
전체 예산 내에서 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하는 함수를 작성하시오.
function solution(d, budget) {
d.sort((a,b) => b - a)
let cnt = 0
while(true) {
let money = d.pop()
budget -= money
if(budget > 0) cnt++
else if(budget === 0) {
cnt++
break
} else break
}
return cnt
}
function solution(d, budget) {
return d.sort((a,b) => a - b).reduce((count, price) => {
return count += ((budget -= price) >= 0)
}, 0)
}
이 풀이에서 count += ((budget -= price) >= 0) 이 부분을 보면
count += true 는 count += 1,
count += false 는 count += 0 과 같다는 것을 알 수 있다.
0 + true // 1
0 + true + true // 2
0 + true * 10 // 10
0 + false // 0
즉 reudce의 count는 budget -= price 가 0보다 크거나 같을 때에만 +1 이 된다. budget이 0보다 작아지면 count + 0 만 반복되서 count 값의 변화가 없어진다.
그렇다면 내가 처음에 썻던 풀이를 while이 아닌 for문을 이용해서 좀 더 간단하게 바꾸는 것도 가능하다.
function solution(d, budget) {
let cnt = 0
d.sort((a,b) => a - b)
for(let i = 0; i < d.length; i++) {
if((budget -= d[i] >= 0) cnt++
}
return cnt
}