본문 바로가기

Algorithm/Programmers

Level 1: 예산, 배열의 오름차순 정렬

이 문서의 내용

    더보기

    예산 내에서 요청된 부서의 예산을 모두 처리할 때 가장 많은 부서를 처리하는 케이스를 찾아냅니다.

    예산은 int budget이며 전체 부서가 요청한 예산은 int[] d입니다.

    문제 풀이: 오름차순으로 정렬 후 예산 차감

    예산 budget=9이고 요청 예산 d=[1, 3, 2, 5, 4]의 케이스를 살펴봅니다. 요청 예산을 정렬하면 d=[1, 2, 3, 4, 5]입니다.

    각 시작 값에 대한 케이스는 예산을 초과하면 계산을 중단합니다.

    시작 값 케이스 1 케이스 2 케이스 3 케이스 5 케이스 6 케이스 7
    1 1+2+3 = 6 1+2+4 = 7 1+2+5 = 8 1+3+4=8 1+3+5=9 1+4+5 = 10
    2 2+3+4 = 9 2+3+5 = 10 - - - -
    3 3+4+5 = 12 - - - - -

    가장 많은 부서를 처리하는 방법은 요청 예산이 낮은 것부터 순차적으로 처리하는 것입니다.

    import java.util.*;
    
    public class Solution {
    	public int solution(int[] d, int budget) {
    		int answer = 0;
    		for (int v :  Arrays.stream(d).sorted().toArray()) {
    			if (v > budget) break;
    			else {
    				budget -= v;
    				++answer;
    			}
    		}
    		
    		return answer;
    	}
    }
    코드 비고
    Line 6 Arrays.stream().sorted().toArray int[] 배열을 사용해 Stream 객체를 만들고 오름차순으로 정렬합니다.
    정렬이 끝난 Stream 객체는 다시 int[] 배열로 캐스팅합니다.
    Line 7 if (v > budget) break 남은 요청을 처리할 예산이 없으면 종료합니다.
    Line 8:11 budget -= v ++answer 예산을 차감하고 요청 건수를 증가시킵니다.