728x90
조건
최대값의 정수를 출력 = mid값에서 가장 큰 값!
이진탐색으로 가장 최대 많이 줄 수 있는 돈을 찾아낸다
import java.util.Arrays;
import java.util.Scanner;
public class 예산 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
int[] array = new int[N];
for(int i = 0; i < N; i++) {
array[i] = scan.nextInt();
}
long M = scan.nextLong();
Arrays.sort(array);
long answer = 0;
long left = 0;
long right = array[N - 1];
while(left <= right) {
long middle =(right + left) / 2;
long sum = 0;
for(long money : array) {
if(money >= middle)
sum += (middle);
else
sum += money;
}
if(sum > M) {
right = middle - 1;
}
else {
left = middle + 1;
answer = Math.max(answer, middle);
}
}
System.out.println(answer);
scan.close();
}
}
728x90
'CS > Algorithm' 카테고리의 다른 글
[ JAVA / 백준 : 9095] 1, 2, 3 더하기 (0) | 2021.08.20 |
---|---|
[ JAVA / 백준 : 2776 ] 암기왕 (0) | 2021.08.16 |
[ JAVA / 백준 : 1072] 게임 (0) | 2021.08.16 |
[JAVA / 백준 : 2805] 나무자르기 (0) | 2021.08.12 |
[ JAVA / 백준 : 1654 ] 랜선자르기 (0) | 2021.08.12 |