백준
#백준_2805 나무 자르기 - Java
ukyonge
2020. 1. 11. 20:06
# 분류 : 이진 탐색
# 정답률이 낮은데에 비해 쉽게 해결할 수 있던 문제, 어떠한 길이로 나무를 자를 때 음수가 되는 것만 주의하면 쉽게 해결
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
long M = Long.parseLong(st.nextToken());
long arr[] = new long[N];
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++) {
arr[i] = Long.parseLong(st.nextToken());
}
Arrays.sort(arr);
long left = 0;
long right = 2000000000;
while(left<=right) {
long middle = (left+right)/2;
long sum=0;
for(int i=0; i<N; i++) {
if((arr[i]-middle)<0) {
sum+=0;
}else
sum+=arr[i]-middle;
}
if(sum < M) {
right = middle-1;
}else if(sum>=M)
left = middle+1;
}
System.out.println(right);
}
}