[Java] 예산 Lv1
예산
문제 프로그래머스 FAQ 내용을 보니 카카오나 기업의 문제들은 저작권이 있으니 풀이를
github나 개인블로그에 올리지 말라고 되어 있어서 링크로 대체합니다.
출처: Programmers
예산
문제의 이해
-내가 이해한 문제의 조건 어떤 복잡한 내용이 있는지 알았는데 간단했다. 주어진 예산 내에서 최대한 많은 부서를 지원하면 된다. 내가 생각한 문제 해결방법은 오름차순으로 숫자를 정렬 후 앞에서부터 쭉 더해나가다가 그 수가 주어진 budget을 넘어가면 끝. 그때 구해진 부서의 수가 최대로 지원 할 수 있는 부서의 수이다. 이유는 정해진 값 내에서 제일 많은 부서를 지원 할 수 있는 방법은 작은 숫자들은 최대한 많이 더하는 것이다.
내가 생각한 풀이 방법
- 주어진 부서별 요청금액의 배열인 d를 오름차순으로 정렬한다.
- 정렬된 배열의 요소를 처음부터 순서대로 더한다.
- 더할 때마다 answer++를 해주어 지원부서의 수를 계산한다.
- 더한 값이 주어진 최대예산 budget을 넘어서면 현재까지 answer값이 최대로 지워할 수 있는 부서의 수이다.
풀이
첫 번째 풀이
풀이방법 그대로 풀었다. (사실 조금 쉽다고 느껴져서 그냥 코드부터 작성하고 풀이방법을 씀)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public int solution(int[] d, int budget) {
int answer = 0;
int temp = 0;
//이거 하나 못만듬... (구글 검색으로 결국 완성은 했는데.. 선택, 삽입, 버블 정렬 3개 중 하나는 최소한 완벽!!!! 하게 구현할 수 있도록 하자)
for(int i = 0; i < d.length - 1; i++){
for(int j = 1; j < d.length - i; j++){
if(d[j - 1] > d[j]){
temp = d[j - 1];
d[j - 1] = d[j];
d[j] = temp;
}
}
}
temp = 0;
for(int i = 0; i < d.length; i++){
temp += d[i];
if(temp > budget){
break;
}
answer++;
}
return answer;
}
}
Leave a comment