[Programmers] 예산

Jinny·2025년 1월 17일
0
  • 날짜 / 주차-누적 횟수: 2025.01.16(목) / 3주차-3회
  • 사이트 이름: 프로그래머스
  • 사용 언어: 자바스크립트
  • 문제 고유 번호 및 레벨: 12982 / Lev 1
  • 나의 풀이 방법:
    function solution(d, budget) {
        let left = budget;
        let count = 0;
        
        let dSorted = d.sort((a, b) => a - b);
        
        for (let i = 0; i < dSorted.length; i++) {
            if (dSorted[i] <= left) {
                left -= dSorted[i];
                count++;
            }
        } 
        
        return count;
    }
    • 오름차순으로 배열을 정렬한다.
    • 일반 for 문을 활용하여 예산과 현재 요청 금액을 빼서 count로 횟수 더한다.
  • 최적 풀이 방법:
    
    function solution(d, budget) {
        return d.sort((a, b) => a - b).reduce((count, price) => {
            return count + ((budget -= price) >= 0);
        }, 0);
    }
    
    • d배열을 오름차순으로 정렬한다.
    • reduce((count, price) ⇒ {…}, 0)
      • 배열을 순회하며, 각 부서에 예산을 배분하면서 몇 개의 부서에 지원했는지 세는 동작을 수행한다.
      • 누적값 count, 현재값 price를 사용한다.
      • 초기값으로 0을 설정한다.
    • budget -= price
      • 현재 부서의 요청 금액 price 만큼 예산을 차감한다.
    • (budget -= price) ≥ 0
      • 남은 예산이 0인지 확인한다.
    • count + (…)
      • 위에서 나온 결과값을 누적값 count에 더한다.
  • 배운 개념:
    • reduce()메소드
      • 파라미터
        • accumulator: callback함수의 반환값을 누적
        • currentValue: 배열의 현재 요소
        • index(Optional): 배열의 현재 요소의 인덱스
        • array(Optional): 호출한 배열
profile
세상을 이롭게 하는 프론트엔드 개발자 Jinny

0개의 댓글

관련 채용 정보