728x90
이 문제는 이분탐색을 통해 해결이 가능했다
이분 탐색의 기준은 인덱스가 아닌 예산이 된다
예산을 기준으로 시행하며 만약 m이 예산의 합보다 작으면 임계치(mid)를 1 감소하고, m이 더 크면 예산 배정이 더 가능한지 확인해야 하니까 1을 더해서 확인해본다
처음엔 좀 어려웠는데 2번 푸니까 이해가 간다!
아래는 코드!
자바 코드)
import java.util.Arrays;
import java.util.Scanner;
public class boj2512 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int answer=0;
int n = sc.nextInt();
int[] budgets = new int[n];
for(int i=0;i<n;i++) {
budgets[i] = sc.nextInt();
}
int m = sc.nextInt();
Arrays.sort(budgets);
int low = 0;
int high = budgets[n-1];
int mid = 0;
while(low<=high) {
long sum = 0;
mid = (low+high)/2;
for(int budget : budgets) {
if(mid < budget) {
sum += mid;
} else {
sum += budget;
}
}
if(sum>m) { //예산 초과
high = mid-1;
} else {
low = mid+1;
answer = mid;
}
}
System.out.println(answer);
}
}
728x90
'코딩테스트 > BOJ' 카테고리의 다른 글
[JAVA] 백준 9095번 - 1, 2, 3 더하기 (0) | 2022.05.04 |
---|---|
[그리디] 백준 11399번 ATM (0) | 2022.02.28 |
[JAVA] 백준 14916번 - 거스름돈 (0) | 2022.02.18 |
[JAVA] 백준 2606번 - 바이러스 (0) | 2022.02.18 |
[JAVA] 백준 2178번 - 미로 탐색 (0) | 2022.02.17 |
댓글