프로그래머스 예산을 풀어보자

JD·2021년 11월 23일
0

제한사항

  • d는 부서별로 신청한 금액이 들어있는 배열이며, 길이(전체 부서의 개수)는 1 이상 100 이하입니다.
  • d의 각 원소는 부서별로 신청한 금액을 나타내며, 부서별 신청 금액은 1 이상 100,000 이하의 자연수입니다.
  • budget은 예산을 나타내며, 1 이상 10,000,000 이하의 자연수입니다.

📢문제이름

예산으로 지원해줄수있는 부서의 최대갯수 반환

📢풀이

  • d를 sort()정렬을 함 (js는 숫자를 정렬할때 sort()안에(a,b)=> a-b 추가해야 된다
  • 정렬후 제일 작은수가 예산보다 크면 결과값 반환
  • reduce()를 이용하여 배열값을 더하여 그값 예산보다 작거나 같을때 계속 idx를 저장
  • reduce() idx는 첫배열은 acc에 저장하여 돌리기때문에 결과값+1을 한다

코드

function solution(d, budget) {
    let answer = 0;
    
    d.sort((a,b)=> a-b);
    
    if(d[0] > budget)return answer;
     
     d.reduce((acc,curr,idx) => {
        console.log(idx);
         answer = budget >= (acc+curr) ? idx : answer ;
        return  acc + curr;
    });
    
    return answer+1;
}

📢마치며

코드실행까지는 금방 됬는데 제출 하기부분에서 테스트3 부분이 계속 실패로 떳다 해결할려고 변수도 줄여보고 index 저장하는부분을 if()문을 삼항연산자로 바꾸고 제출도 해봤는데 다 실패로 떠서 문제를 다시 읽고 가능한 상황을 생각해보니 reduce()만 초반에는 사용했기 때문에 첫값이 예산보다 커도 전부 돌려 효율성이 나빠 실패로 떨어진거다 그래서 if(d[0] > budget)return answer; 추가하고 정상적으로 제출이 됬다 문제를 풀때 문제 입출력만 너무 생각하지말고 좀 더 넓게 예시를 생각해야겠다

📢출처

👍프로그래머스

0개의 댓글