Baekjoon/Silver
Baekjoon 2805.EKO(나무자르기) c++ [Silver II]
Hun-bot
2025. 2. 4. 23:40
728x90
반응형
이분탐색
정렬된 범위에 특정 값을 찾거나 최적의 값을 구할 때 사용
left =0, right는 max로 설정 mid값을 잡아서 조건에 만족하는 최댓 값을 찾을 때까지 위해 반복
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N, M;
cin >> N >> M;
vector<int> trees(N);
for (int i = 0; i < N; i++)
{
cin >> trees[i];
}
int left = 0, right = *max_element(trees.begin(), trees.end()), sum = 0;
while (left <= right)
{
int mid = (left + right) / 2;
ll total = 0;
for (int t : trees)
{
if (t > mid)
{
total += t - mid;
}
}
if (total >= M)
{
sum = mid;
left = mid + 1;
}
else
{
right = mid - 1;
}
}
cout << sum;
return 0;
}
728x90
반응형