# 분류 : 이진 탐색

# 정답률이 낮은데에 비해 쉽게 해결할 수 있던 문제, 어떠한 길이로 나무를 자를 때 음수가 되는 것만 주의하면 쉽게 해결


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);
	}
}

+ Recent posts