더보기
예산 내에서 요청된 부서의 예산을 모두 처리할 때 가장 많은 부서를 처리하는 케이스를 찾아냅니다.
예산은 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+4+5 = 10 | |||||
2 | 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;
}
}
코드 | 비고 | |
정렬이 끝난 Stream 객체는 다시 |
||
남은 요청을 처리할 예산이 없으면 종료합니다. | ||
예산을 차감하고 요청 건수를 증가시킵니다. |
'Algorithm > Programmers' 카테고리의 다른 글
Level 1: PCCP 기출문제 - 붕대 감기, 시간 경과에 따른 로직 계산 (0) | 2023.12.04 |
---|---|
Level 1: 둘만의 암호, 임의의 ASCII 코드 연산을 모킹하여 풀이 (0) | 2023.11.30 |
Level 1: 문자열 내 마음대로 정렬하기, Arrays.sort()와 Stream의 sorted() (0) | 2023.11.30 |
Level 1: 나누어 떨어지는 숫자 배열, Stream의 filter()와 sorted() (0) | 2023.11.30 |
Level 1: 같은 숫자는 싫어, 배열의 연속된 중복 Element 제거 (0) | 2023.11.30 |