[이것이 코딩 테스트다] 떡볶이 떡 만들기

고재욱·2021년 9월 21일
0

❓ 문제 ❓
절단기에 높이를 지정하여 떡을 한번에 절단한다. 총 길이가 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;
}

0개의 댓글