예산
2019, Jun 02
- https://programmers.co.kr/learn/courses/30/lessons/43237
- 이분법을 이용하여 예산의 상한 가격을 구하는 문제입니다.
- 이 문제에서 구해야할 것은 상한 가격 입니다. 따라서 구할 수 있는 상한 가격 중 가장 큰 값을 이분법을 이용하여 구해야 합니다.
- 아래 코드 중
check
함수를 보면 True가 되는 조건을 확인할 수 있습니다.
#include <vector>
#include <string>
#include <algorithm>>
#include <deque>
#include <iostream>
#include <queue>
using namespace std;
int totalBudget;
vector<int> v;
bool check(int bound) {
int sum = 0;
for (int i = 0; i < v.size(); ++i) {
sum += min(v[i], bound);
}
if (sum <= totalBudget) {
return true;
}
else {
return false;
}
}
int solution(vector<int> budgets, int M) {
int answer = 0;
v = budgets;
totalBudget = M;
int left = 1;
int right = *max_element(budgets.begin(), budgets.end());
while (left <= right) {
int mid = (left + right) / 2;
if (check(mid)) {
answer = max(answer, mid);
left = mid + 1;
}
else {
right = mid - 1;
}
}
return answer;
}