[프로그래머스] 예산
https://programmers.co.kr/learn/courses/30/lessons/12982
첫번째 코드
function solution(d, budget) {
var answer = [];
var sum = 0;
let arr = d.sort((a,b) => a-b);
for(let i = 0; i < arr.length; i++){
sum += arr[i];
answer.push(arr[i]);
if(sum + arr[i+1] > budget)
break;
}
return answer.length;
}
테스트 3번에서 틀렸다..
어떤 테스트 케이스에 맞지 않는지 고민해보자
부서별 신청한 금액들이 예산보다 다 높을 때, 테스트 3번이 틀린 것을 알 수 있었다.
function solution(d, budget) {
var answer = [];
var sum = 0;
let arr = d.sort((a,b) => a-b);
for(let i = 0; i < arr.length; i++){
if(arr[i] < budget){
sum += arr[i];
answer.push(arr[i]);
}
if(sum + arr[i+1] > budget)
break;
}
return answer.length;
}
하지만 예산이 신청 금액들보다 적을 때, 예외 처리를 했는데
테스트 1, 4번이 오류가 떴다.
완벽하지 않은 코드다..
마지막 코드
function solution(d, budget) {
var answer = [];
var sum = 0;
let arr = d.sort((a,b) => a-b);
for(let i = 0; i < arr.length; i++){
if(arr[i] <= budget){ // 작거나 같다 처리를 해야했다.
sum += arr[i];
answer.push(arr[i]);
}
if(sum + arr[i+1] > budget)
break;
}
return answer.length;
}
추가해본 테스트 케이스들
3번째는 예산이 신청 금액들보다 작은 테스트 케이스 (테스트3에 속한다)
4번째는 첫 신청 금액과 예산이 같은 테스트 케이스 (테스트 1,3에 속한다)
내장함수 reduce를 이용한 코드(효율성이 조금 떨어진다고는 한다.)
반복할 때 마다 reduce 호출해서 검사하고 pop까지 해야돼서 효율성이 많이 떨어지네요... (woorim960님)
function solution(d, budget) {
d.sort((a, b) => a - b);
while (d.reduce((a, b) => (a + b), 0) > budget) d.pop();
return d.length;
}