본문 바로가기

Algorithm/BAEKJOON

[BOJ] 2805번 나무 자르기 (C++)

728x90
반응형

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

 

2805번: 나무 자르기

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

www.acmicpc.net

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
	long long n, m;
	cin >> n >> m;
	
	vector<long long> v(n);
	long long min = 0, max = 0;
	long long result = 0;
	for(int i = 0; i < n; i++){
		cin >> v[i];
		if(v[i] > max) max = v[i];
	}
	
	while(min <= max){
		long long mid = (min + max) / 2;
		long long total = 0;
		for(int i = 0; i < n; i++){
			if(mid < v[i]) total += v[i] - mid;
		}
		
		if(total >= m){
			if(result < mid) result = mid;
			min = mid + 1;
		}else{
			max = mid - 1;
		}
	}
	
	cout << result << endl;
	
	return 0;
}
728x90
반응형