hayeonn 2022. 9. 21. 19:36
반응형

[풀이]

function solution(d, budget) {
  let result = 0;
  let sum = 0;

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

  for (let i = 0; i < d.length; i++) {
    sum += d[i];

    if (sum <= budget) {
      result++;
    } else {
      break;
    }
  }
  return result;
}

이건,, 잘 못풀었다...

for문을 통해서 sum += d[i] 까지는 썼는데 최대 몇개의 부서에 지원해야 하는지? 에 대한 값을 풀 수가 없었다.

구글링해서 풀이를 봤는데, d 배열에 대한 오름차순을 먼저 시켰어야 했다.

이 때, 오름차순을 시키는 이유적은 금액부터 지원해주면 최대한 많은 부서의 물품을 구매할 수 있기 때문이다.

 

따라서,

1. 최대 몇개의 부서에 지원할지에 대한 결과값을 담을 result 변수를 설정

2. 각 부서에서 신청한 금액의 합을 담을 sum 변수 설정

3. d 배열을 sort()를 사용해 오름차순 시켜줌 (적은 금액을 지원한 부서 순서대로)

4. for문을 돌려서 d 배열 안의 값을 누적시키면서 더해줌

5. if문 안에서 신청한 금액의 합(sum)이 예산(budget)보다 적거나 같으면 result 값을 1 증가시켜줌 (최대 지원가능한 부서의 수)

6. 만약 sum 값이 budget 값을 넘으면 break 를 걸어 for문 순회 종료

 

[코드 리뷰]

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

if - else를 사용해 break 로 종료하는 것 보다 

sum에 d의 값을 누적하다가 sum > budget 일 때 바로 return result 하는 것이 좋은 방법이 될 것 같다.

 

sort 메서드는 기존 배열을 바꿔주는 메서드이므로 다시 d에 할당하지 않아도 된다.

const arr = [5, 2, 3, 1, 4];

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

console.log(arr); // [1, 2, 3, 4, 5]