티스토리 뷰

1Day 1Algorithm

[DAY 17] 예산

walk_through_me 2019. 10. 17. 15:52

S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다.

물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다.

부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요.

 

 

코딩테스트 연습 - 예산 | 프로그래머스

S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원

programmers.co.kr

 

풀이

function solution(d, budget) {
    var answer = 0;
    let sum = 0;
    d.sort((a,b) => {
        return a - b;
    });
    
    for(let i = 0; i < d.length; i++) {
        sum += d[i];
        if(sum > budget) break;    
        answer++;
    }
    
    return answer;
}

1. 최대한 많은 부서가 배정받을 수 있도록 오름차순으로 정렬

2. sum 변수를 정의함

3. for문을 돌면서 각 부서의 예산을 sum에 합쳐줌

4. sum이 예산보다 크면 for문을 끝내고 answer를 반환

5. 그렇지 않으면 answer에 1을 더해주고 반복함

 

 

다른 사람의 풀이

function solution(d, budget) {
    d.sort((a, b) => a - b);

    while (d.reduce((a, b) => (a + b), 0) > budget) d.pop();

    return d.length;
}

while문 안에서 reduce를 이용해 합계를 구하면서, budget보다 작아지면 while문을 종료시킴. budget보다 클 땐 맨 뒤에부터 하나씩 pop()으로 제거하고, 마지막으로 d의 길이를 반환함

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함