https://www.acmicpc.net/problem/6236
이 문제도 바이너리 서치로 풀 수 있는 문제였다.
#include <bits/stdc++.h>
using namespace std;
int n, m; //m번만 돈을뺀다.
int result = 100000 * 10000 + 100;
vector<int> v;
bool check(int num)
{
int a = 0; int takeMoney = 1;
for (int i : v) {
a += i;
if (i > num) return false; //이미 하루가 num보다 크다. -> 금액이 맞지 않다.
if (a > num) { //총합 한 값이 하루의 금액보다 크다.
a = i;
takeMoney += 1;
}
}
return takeMoney <= m; //m번만 돈을 빼는데 이 함수 내에서 한 TakeMoney가 더 작거나 같다.
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m;
int temp;
int sum = 0; //모든 금액 총합
for (int i = 0; i < n; i++) {
cin >> temp;
v.push_back(temp);
sum += temp;
}
int left = 1, right = sum, mid;
while (left <= right) {
mid = (left + right) / 2;
if (check(mid)) {
result = min(result, mid);
right = mid - 1;
}
else { //금액을 더 크게 만든다.
left = mid + 1;
}
}
cout << result;
}
'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글
백준 1269 C++ (0) | 2025.02.09 |
---|---|
백준 7795 C++ (0) | 2025.02.09 |
백준 2792 C++ (0) | 2025.02.07 |
백준 17822 C++ (0) | 2025.01.30 |
백준 15683 C++ (0) | 2025.01.30 |