프로그래머스 코딩테스트 레벨1.예산(JavaScript)

부기·2022년 1월 30일

문제설명

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

제한사항

  • d는 부서별로 신청한 금액이 들어있는 배열이며, 길이(전체 부서의 개수)는 1 이상 100 이하입니다.
  • d의 각 원소는 부서별로 신청한 금액을 나타내며, 부서별 신청 금액은 1 이상 100,000 이하의 자연수입니다.
  • budget은 예산을 나타내며, 1 이상 10,000,000 이하의 자연수입니다.

내 코드

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

풀이 과정

  1. 예산을 최대한 많은 부서에 지원을 하려면 예산이 큰 부서보다 작은 부서 순으로 지원을 하는 것이 가장 많은 부서에 지원을 해 줄 수 있다. 따라서 d를 sort를 이용하여 오름차순으로 배열을 정렬해주었다.
  2. 그리고 d 배열을 돌면서 만약에 예산이 d[i]까지 지원하면 -이다. 이러면 i까지 지원가능하다고 answer에 넣고 for문을 탈출한다. (이때, 배열의 길이는 배열의 요소와 달리 1부터 시작하기 때문에 answer에 i 값을 넣는 것이 맞다.)
  3. 만약 if문에 해당하지 않는 경우 전체 예산에서 d[i]만큼 예산을 삭감해준다.
  4. 중간에 탈출하지 않고 for문이 다 돈 경우도 생각해줘야한다. 이 경우는 예산이 모든 예산을 요청한 모든 부서를 다 수용가능 할 때이므로 배열의 길이를 answer에 넣어주면 된다.
profile
무럭무럭 자라는 중 ∙∙∙🌱🐣

0개의 댓글