JN33 2022. 11. 23. 01:06
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

나의 답


로직 : d 베열 요수의 부분합 <= 예산일 때, 가장 많은 요소의 수를 가진 부분합의 length를 반환 
[pseudo code]
1. arr를 오름차순으로 sort 하기
2. partialSum = d.reduce((a,b)=>a-b) 변수를 선언
3. while (partialSum >= budget) 
    - partialSum = arr.reduce > budget => pop
4. arr.length를 리턴

 

function solution(d, budget) {
  d.sort((a, b) => a - b);
  let partialSum = d.reduce((acc, curr) => acc + curr, 0);
  while (partialSum > budget) {
    d.pop();
    partialSum = d.reduce((acc, curr) => acc + curr, 0);
  }
  return d.length;
}

console.log(solution([1, 3, 2, 5, 4], 9));
console.log(solution([2, 2, 3, 3], 10));

// while 문 조건부에 연산을 적어 더 줄일 수 있음
function solution(d, budget) {
  d.sort((a, b) => a - b);

  while (d.reduce((acc, curr) => acc + curr, 0) > budget) d.pop();

  return d.length;
}