프로그래머스 LV1 예산

장성우·2023년 7월 8일

문제풀이

목록 보기
3/9

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

문제설명

부서별 신청금액이 들어있는 배열 d, 전체 예산 budget을 메개변수로 가진다.
전체 예산 내에서 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하는 함수를 작성하시오.

  • 내 풀이
function solution(d, budget) {
    d.sort((a,b) => b - a)
    let cnt = 0

    while(true) {
        let money = d.pop()
        budget -= money
        if(budget > 0) cnt++
        else if(budget === 0) {
            cnt++
            break
        } else break
    }
    return cnt
}
  • 프로그래머스에 있는 다른 풀이
function solution(d, budget) {
  return d.sort((a,b) => a - b).reduce((count, price) => {
    return count += ((budget -= price) >= 0)
  }, 0)
}

이 풀이에서 count += ((budget -= price) >= 0) 이 부분을 보면
count += true 는 count += 1,
count += false 는 count += 0 과 같다는 것을 알 수 있다.

0 + true // 1
0 + true + true // 2
0 + true * 10  // 10

0 + false // 0

즉 reudce의 count는 budget -= price 가 0보다 크거나 같을 때에만 +1 이 된다. budget이 0보다 작아지면 count + 0 만 반복되서 count 값의 변화가 없어진다.

그렇다면 내가 처음에 썻던 풀이를 while이 아닌 for문을 이용해서 좀 더 간단하게 바꾸는 것도 가능하다.

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

0개의 댓글