예산_Java

컴투루·2022년 6월 29일
0

프로그래머스 Lv.1

목록 보기
28/38

Summer/Winter Coding

🔥 예산 🔥


👀 문제

S사에서 각 부서에 필요한 물품을 지원해주려한다.
하지만 예산이 정해져있기 때문에 모든 부서의 물품을 구매할 수는 없다.
그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 한다.
부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하는 solution을 완성해보자


✔️ 조건

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

👩‍💻 입력 & 🧙 출력

dbudgetreturn
[1,3,2,5,4]93
[2,2,3,3]104

🙋‍♀️ 풀이

import java.util.*;

class Solution {
    public int solution(int[] d, int budget) {
        int answer = 0;
        
        Arrays.sort(d);

        //부서가 하나일때 
        if(d.length==1){
            if(d[0]<budget){
                answer = 1;
            }
        }
        
        int index = 0;    
        int sum = 0;
        
        for(int i=0;i<d.length;i++){
            sum  = sum + d[i];

            if(sum <= budget){
                index = index +1;
                answer = index;
            }else if(sum > budget){
                answer = index;
            }else if(sum == budget){
                answer = d.length;
            }
        }    
        return answer;
    }
}
  1. d를 sort를 이용해서 정렬해준다.
  2. 부서가 하나이고 d[0]이 budget보다 작다면 answer = 1
  3. d의 길이만큼 반복문을 돌면서 sum에 d의 i번째 값을 더한다.
  4. sum의 값이 budget보다 작거나 같을때는 index의 값에 +1을 해주고 answer 에 index를 대입
  5. budget보다 커지면 answer에 index를 대입해주고
  6. 같을 경우 answer에 d의 length를 대입해준다.

처음 문제를 풀었을 때 테스트는 통과했는데 제출하고나니 실행 실패가 와르르 쏟아졌다.

처음에는 테스트 4, 6, 18, 19, 21, 23에서 오류가 발생했다.
이때는 sum이 budget보다 작은 경우를 생각하지 않아서 실패를 한 것이었다.

위의 케이스를 추가하고 코드를 고치고 나니 이제는 4번,21번, 23번이 문제였다.

여기서는 첫번째 if의 조건 sum <= budget이 문제였다.
같은 경우에도 index를 추가해주어야하는데 안해서 그랬던 것이다.

어찌저찌 문제를 해결하기는 했는데 뭔가 찝찝하고 왜 된거지 싶은 문제다.


💬 다른 풀이

import java.util.*;

class Solution {
  public int solution(int[] d, int budget) {
      int answer = 0;

        Arrays.sort(d);

        for (int i = 0; i < d.length; i++) {
            budget -= d[i];

            if (budget < 0) break;

            answer++;
        }

        return answer;
  }
}

이게 뭐람
난 뭘한거람
이렇게 간단하고 쉽게 이해되는 코드가 있는데 혼자 뭘한거지


👏 마무리

profile
맘 먹으면 못할 게 없지

0개의 댓글