본문 바로가기
백준

백준 이분탐색 - 2805번 : 나무 자르기

by 맴썰 2022. 3. 2.

https://www.acmicpc.net/problem/2805

 

2805번: 나무 자르기

첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보

www.acmicpc.net


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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int a = Integer.parseInt(st.nextToken());
		long b = Long.parseLong(st.nextToken());
		st = new StringTokenizer(br.readLine());
		long[] tree = new long[a];
		for(int i=0; i<a; i++) {
			tree[i] =  Long.parseLong(st.nextToken());
		}
		long max = 0;
		Arrays.sort(tree);
		long htarget = tree[a-1];
		long ltarget = 1;
		while(true) {
			long target = (htarget+ltarget)/2;
			long sum = 0;
			if(htarget<ltarget) break;
			for(int i=0; i<a; i++) {
				long diff = tree[i]-target;
				if(diff<=0) continue;
				else {
					sum+=diff;
				}
			}
			if(sum<b) {
				htarget = target -1;
			}
			if(sum>=b) {
				max = Math.max(target, max);
				ltarget = target+1;
			}
		}
		bw.write(max+"");
		bw.close();
	}
	
}

'백준' 카테고리의 다른 글

백준 스택 - 10828번 : 스택  (0) 2022.03.03
백준 스택 - 9012번 : 괄호  (1) 2022.03.03
백준 큐 - 2164번 : 카드2  (0) 2022.03.02
백준 큐 - 1966번 : 프린터 큐  (0) 2022.03.02
백준 이분탐색 - 1920번 : 수 찾기  (0) 2022.03.02