✔ 예산
문제 분석하기
각 부서에 대한 신청 금액을 오름차순으로 정렬한 후,
전체 예산에서 하나씩 빼면서 0보다 작게 되지 않아 지원해줄 수 있다면 지원 가능한 부서의 갯수 증가
손으로 풀어보기
- 각 부서에 대한 신청 금액을 오름차순 정렬
- 전체 예산에서 하나의 부서씩 신청 금액만큼 지원 가능한지 확인
- 현재 전체 예산에서 한 부서의 신청 금액을 뺐을 때 0보다 작지 않다면 지원 가능
- 지원 가능한 부서의 갯수를 반환
슈도코드 작성하기
d(부서별로 신청한 금액이 들어있는 배열)
budget(전체 예산)
answer(최대 지원 가능한 부서의 갯수)
d 오름차순 정렬
for(i -> d의 크기만큼) {
budget에서 d[i] 빼주기
if(현재 전체 예산이 0보다 작다면) {
break;
}
answer 증가
}
answer 반환
코드 구현하기
/**
* 12982) 예산
*/
public class L033_12982 {
// d(부서별로 신청한 금액이 들어있는 배열)
// budget(전체 예산)
public int solution(int[] d, int budget) {
// answer(최대 지원 가능한 부서의 갯수)
int answer = 0;
// d 오름차순 정렬
Arrays.sort(d);
for (int i = 0; i < d.length; i++) {
// budget에서 d[i] 빼주기
budget -= d[i];
// 현재 전체 예산이 0보다 작다면
if (budget < 0)
// 종료
break;
// answer 증가
answer++;
}
// answer 반환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L033_12982 solution = new L033_12982();
int[] d = { 1, 3, 2, 5, 4 };
int budget = 9;
int result = solution.solution(d, budget);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[17682] 다트 게임 (0) | 2023.12.29 |
---|---|
[17681] 비밀지도 (0) | 2023.12.29 |
[12977] 소수 만들기 (0) | 2023.12.29 |
[12969] 직사각형 별찍기 (0) | 2023.12.29 |
[12954] x만큼 간격이 있는 n개의 숫자 (0) | 2023.12.29 |