프로그래머스, 예산(level 1)

껌뻑이·2021년 8월 24일
0

Programmers

목록 보기
3/6
post-thumbnail

프로그래머스, 예산

문제

각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사 후 회사의 예산에 맞춰 물품을 지원해 줄때 최대한 많이 지원해 줄 수 있는 부서의 수를 구하는 것이다.

입출력의 예

dbudgetresult
[1, 3, 2, 5, 4]93
[2, 2, 3, 3]104

나의 풀이

같은 예산(budget)으로 가장 많은 부서에게 지원을 하기 위해서는 적은 금액부터 지원을 해줘야 된다고 생각했다. 그래서 먼저 d를 sort를 이용해서 올림차순으로 바꿔주었다.

  d.sort((a, b) => a - b);

그 후 for문을 이용해서 적립된 금액(sava)가 예산(budget)을 넘어가면 break를 실행하고 아니면 count에 1을 더하게 구현하였다.

그 후 count를 return해주었다.

  let count = 0;
  let save = 0;

  for(let i = 0; i < d.length; i++){
    save += d[i];
    if(save > budget) break
    else count+=1
  }

  return count;

결과는 정답으로 나왔다.

코드 줄이기

for이 d의 길이만큼 돌아가기 때문에 내장 함수를 사용해도 될 것 같은 느낌이 들었다.

forEach

   let count = 0;
   let save = 0;
    
   d.sort((a, b) => a - b).forEach(item => {
        save += item;
        save <= budget && (count+=1);
   })
    
   return count;

메서드 체이닝을 통해 d를 sort(올림차순)한 후 바로 forEach()를 통해 최대 지원 부서 수를 구했다.

reduce

  let save = 0;
    
  return d
    .sort((a, b) => a - b)
  	.reduce((acc, cur) => {
      save += cur;
      save <= budget && (acc += 1);
      return acc;
  }, 0);

reduce를 사용하면 저장공간을 가질 수 있어서 변수를 하나 줄일 수 있고, 바로 reture을 할 수 있다.

0개의 댓글