❓ 문제 ❓
절단기에 높이를 지정하여 떡을 한번에 절단한다. 총 길이가 M일 때 적어도 M만큼 떡을 얻기 위해 절단기에 설정할 수 있는 높이의 최댓값을 구하라
💯 문제 풀이💯
이진 탐색으로 풀 수 있는 문제이다.
left로 0, right으로 떡의 최대 길이로 하여 mid으로 떡을 잘라보고 그 길이가 m보다 작으면 right을 수정하고 반대면 left를 수정한다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr.begin(), arr.end());
int left = 0, right = arr[n - 1];
int answer = 0;
while (left <= right) {
int mid = (left + right) / 2;
int length = 0;
for (int i = 0; i < n; i++) {
if (arr[i] > mid)
length += arr[i] - mid;
}
if (length < m) {
right = mid - 1;
}
else if (m <= length) {
left = mid + 1;
answer = max(answer, mid);
}
}
cout << answer;
}