[백준] 2805번 나무 자르기 C++

semi·2022년 10월 4일
0

coding test

목록 보기
47/57

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

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

long long check(vector<long long> v, long long high)
{
	long long total = 0;
	for (int i = 0; i < v.size(); i++)
	{
		if (v[i] - high > 0)
			total += v[i] - high;
	}
	return total;
}

int main(void)
{
	cin.tie(0);
	cout.tie(0);
	ios_base::sync_with_stdio(0);
	long long N, M, tmp;
	vector<long long> v;
	long long low = 0, high = 0;
	long long answer = 0;
	cin >> N >> M;
	for (int i = 0; i < N; i++)
	{
		cin >> tmp;
		v.push_back(tmp);
		high = max(high, tmp);
	}
	while (low <= high)
	{
		long long mid = (low + high) / 2;
		if (check(v, mid) >= M)
		{
			answer = max(answer, mid);
			low = mid + 1;
		}
		else
		{
			high = mid - 1;
		}
	}
	cout << answer;
	return 0;
}

0개의 댓글