[BOJ] 2805. 나무 자르기
15 Apr 2026
Reading time ~1 minute
풀이
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int[] arr = new int [N];
for(int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
int left = 0;
int right = arr[N - 1];
int answer = 0;
while(left <= right) {
int mid = (left + right) / 2;
if(isOK(arr, mid, M)) {
answer = Math.max(answer, mid);
left = mid + 1;
} else {
right = mid - 1;
}
}
System.out.println(answer);
}
public static boolean isOK(int[] arr, int mid, int M) {
for(int i = 0; i < arr.length; i++) {
if(arr[i] <= mid) continue;
else M = M - (arr[i] - mid);
if(M <= 0) return true;
}
return false;
}
}