백준 2805번(Java)

박은지·2025년 4월 18일
0

백준

목록 보기
63/89
post-thumbnail

import java.io.*;
import java.util.*;

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());
		int M = Integer.parseInt(st.nextToken());

		int[] tree = new int[N];

		int min = 0;
		int max = 0;

		st = new StringTokenizer(br.readLine(), " ");
		for (int i = 0; i < N; i++) {
			tree[i] = Integer.parseInt(st.nextToken());

			if (max < tree[i]) {
				max = tree[i];
			}
		}

		// 이분 탐색 (upper bound)
		while (min < max) {

			int mid = (min + max) / 2;
			long sum = 0;
			for (int treeHeight : tree) {

				if (treeHeight - mid > 0) {
					sum += (treeHeight - mid);
				}
			}

			if (sum < M) {
				max = mid;
			}

			else {
				min = mid + 1;
			}
		}
		System.out.println(min - 1);
	}
}
profile
백엔드 개발자가 되고싶은 eunzi😊

0개의 댓글