[Lv1] 예산

Creating the dots·2022년 1월 6일
0

Algorithm

목록 보기
44/65

프로그래머스

나의 풀이

수도코드

  • 가장 많은 부서의 물품을 구매하기 위해서는 작은 예산부터 차례로 구매해야한다.
  • 배열 d를 오름차순으로 정렬한다.
  • 차례로 구매한 비용의 합을 변수 sum에 할당한다.
  • sum에 다음 비용을 더한 값이 예산보다 작다면 sum에 다음 비용을 더한다.
  • sum에 다음 비용을 더한 값이 예산과 일치한다면, 현재까지 구매한 부서 수를 리턴한다.
  • sum에 다음 비용을 더한 값이 예산보다 크다면, 이전까지 구매한 부서 수를 리턴한다.
function solution(d, budget){
  d.sort((a,b) => a-b);
  let sum = 0;
  for(let i=0; i<=d.length; i++){
    if(sum + d[i] < budget){
      sum += d[i];
    }else if(sum + d[i] === budget){
      return i+1; //i는 인덱스이고, 결과는 구매한 부서 개수이므로 1을 더해준다.
    }else{
      return i; 
    }
  }
}

다른 분의 풀이

수도코드

  • 부서 개수를 리턴할 변수 cnt를 선언한다.
  • 배열 d 오름차순으로 정렬한다.
  • d를 차례로 방문해 예산에서 각 비용을 빼고, 그 값이 0보다 작다면 cnt를 리턴한다.
  • 예산이 0보다 크다면, cnt++를 해준다.
  • 반복문이 끝나면 cnt를 리턴한다.

💫 예산에서 비용을 빼는 방법이 다른 변수 sum을 만들어 비교하는 것보다 이해하기 쉽고 간단한 것 같다.

function solution(d, budget){
  let cnt = 0;
  d.sort((a,b) => a-b);
  
  for(let vals of d){
    budget -= vals;
    
    if(budget<0) break;
    else cnt++
  }
  return cnt;
}
profile
어제보다 나은 오늘을 만드는 중

0개의 댓글