알고리즘

프로그래머스 - 예산

Heidong 2022. 7. 21. 21:01
반응형

 

내 풀이

import java.util.Arrays;

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

        Arrays.sort(d); // 1 2 3 4 5
        
        for(int i=0; i<d.length; i++) {
        	if(cost + d[i] > budget) { // 원소 + 원소 > 예산 break
        		break;
        	} else { // 예산보다 작으면 cost에 저장 answer 회수 증가
        		cost += d[i];
        		answer++;
        	}
        }

        return answer;
    }

    public static void main(String[] args) {
        // 예산

        P_38 p = new P_38();
        int[] d = {1,3,2,5,4};
        int budget = 9;

        System.out.println(p.solution(d, budget));
    }
}

핵심은 배열을 정렬 하는 것.

작은 수 부터 큰 수가 있는 오름차순으로 정렬하게 되면

반복문이 작은 수 부터 돌기 때문에 계산이 가능해진다.

 

 

다른 사람 풀이

public int solution2(int[]d, int budget) {
    	int answer = 0;
    	
    	Arrays.sort(d);
    	
    	for(int i=0; i<d.length; i++) {
    		
    		budget -= d[i]; 
    		// 예산에서 원소 빼기 (정렬을 했으니까 작은 수 부터 빼나가는 것)
    		// 그러다 0 보다 작아지면 반복문 탈출
    		// 0보다 크다면 answer 카운트 증가
    		
    		if(budget < 0) break;
    		
    		answer ++;
    	}
    	
    	return answer;
    	
    }

뺄셈을 이용하여 풀이한 모습.

어차피 예산을 가지고 계산하기 때문에 오름차순으로 정렬 후 예산에서 빼줘도 구할 수 있다.

반응형