[프로그래머스] 예산 😄

GoGoDev·2021년 5월 25일
0

Programmers Lv.1🌱

목록 보기
12/46
post-thumbnail

[프로그래머스] 예산
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;
}
profile
🐣차근차근 무럭무럭🐣

0개의 댓글