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
반응형
'Baekjoon > Silver' 카테고리의 다른 글
Baekjoon 6550.ALL IN ALL(부분 문자열) c++ [Silver V] (0) | 2025.02.20 |
---|---|
Baekjoon 2003.수들의 합2 c++ [Silver IV] (0) | 2025.02.04 |
Baekjoon 15650.N과 M (2) c++ [Silver III] (0) | 2025.01.09 |
Baekjoon 10845.큐 c++ [Silver IV] (0) | 2024.12.30 |
Baekjoon 10816.숫자 카드 2 c++ [Silver IV] (0) | 2024.12.30 |