코딩/프로그래머스 코딩테스트

[프로그래머스] 예산

민쯔 2021. 10. 6. 23:07
728x90
반응형

안녕하세요. 민쯔입니다.😊

제가 매주 1개씩 프로그래머스 코딩 테스트 연습문제를 푸는데요.

이번에는 예산 문제를 풀어보았습니다.

이문제가 이상하게 진짜 너무 안풀렸는데 막상 답을 알게 되니까 진짜... 왜 못 풀었지 싶더라고요ㅠㅠ

그럼 해결방안에 대해 설명하겠습니다.

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

    for (let i of d) {
        if (i > budget) {
            break;
        } else {
            budget -= i;
            answer += 1;
        }
    }
    return answer;
}

이번 문제는 "최대 몇 개의 부서에 물품을 지원할 수 있는지"를 구하는 문제입니다.

최대로 물품을 지원하기 위해서는 금액이 적은 것 부터빼면 최대한 많이 물품을 지원할 수 있겠지요?

그래서 이번 문제도 저번이랑 비슷하게 sort()를 사용해서 배열을 오름차순으로 먼저 정리해줬습니다.

d.sort((a, b) => a - b); // 오름차순 정리

  • 이렇게 안 하고 sort()로 끝내면 테스트 통과 못합니다.

 

그다음 for문을 이용하여 최대 몇 개의 부서에 물품을 지원할 수 있는지 구했는데요.

저는 for of 문을 사용하여 구하였습니다.

for (let i of d) // 배열의 원소 반환

  • for of문은 배열의 원소를 반환하는 반복문입니다.
  •  d [1,3,2,5,4] 일 경우 1, 3, 2, 5, 4가 출력이 됩니다.

 

if (i > budget) {break;}

  • 부서가 하나만 있는데 예산보다 원하는 금액이 더 클 경우
    • d [2], budget=1
  • 부서들 중 예산보다 원하는 금액이 더 클 경우
    • d [1, 2, 4, 6, 7], budget=5

이럴 경우 break 해서 기존의 answer = 0;으로 반환하기

 

else { budget -= i; answer += 1; }

  • else :  i < budget 
    • 부서가 원하는 금액이 예산보다 작을 경우
  •  i < budget 때까지 budget -= i; answer += 1; 하기
    • budget -= i; : 예산에서 부서가 원하는 금액 빼기
    • answer += 1; : 지원 가능 부서 하나씩 더하기

 

728x90
반응형