[Lv.1]예산

Jihyun-Jeon·2022년 4월 4일
0

문제 : https://programmers.co.kr/learn/courses/30/lessons/12982

🔶내가 한 방법

(reduce를 돌면서 배열의 요소를 더하려고 했으나 실패함. 그래서 직관적인 for문 사용.)
1. 배열을 오름차순으로 정렬함
2. for문으로 배열을 돌면서 젤 앞 요소부터 더해봄
3. 예산을 초과하지 않을때 까지 최대한 더한 후
4. 예산을 초과하면 for문을 break함.
5. 마지막 요소의 인덱스 값+1을 반환함

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

  let sum = 0;
  let result = 0;

  for (let i = 0; i < arr.length; i += 1) {
    sum += arr[i]; 
    if (sum <= budget) {
      result = i + 1;
    } else {
      break;
    }
  }
  //
  return result;
}

🔶다른 사람 풀이

  • 방법1. - reduce를 활용해 카운트 함.
function solution(arr, budget) {
  return arr
    .sort((a, b) => a - b)
    .reduce((acc, cur) => {
      // console.log((budget -= cur) >= 0); // t,t,t, f,f
      return acc + ((budget -= cur) >= 0);
    }, 0);
}
  • 방법2. - reduce로 배열 전체 요소를 더한 후, budget보다 크면 뒤에서 부터 하나씩 제거함.
function solution(arr, budget) {
  arr.sort((a, b) => a - b);
  while (arr.reduce((acc, cur) => acc + cur) > budget) {
    arr.pop();
  }

  return arr.length;
}
  • 방법3 - 질문
function solution(arr, budget) {
  return arr
    .sort((a, b) => a - b) // [1,2,3,4,5]
    .filter((x) => (budget - x >= 0 ? ((budget -= x), 1) : 0)); // [1,2,3,]
}

🔶피드백

1.reduce를 통해 숫자를 카운트 할 수 있음
2.arr요소를 "더하면서" budget보다 큰지 조건을 계산 할 수도 있지만,
반대로 budget에서 arr요소를 "빼면서" 조건을 계산할 수 있음.

0개의 댓글