반응형
위의 문제와 거의 똑같은 문제다. 해당 링크 설명을 보고 한번 풀어보자.
#include <iostream>
#include <climits>
#include <vector>
using namespace std;
int l = 1; int h = INT_MAX;
int n, m;
vector <int> v;
bool check(int mid) {
for (int i = 0; i < n; i++) {
if (v[i] > mid)return 0;
}
int sum = 0;
int cnt = 1;
for (int i = 0; i < n; i++) {
if (sum+v[i] <= mid) {
sum+=v[i];
}
else {
sum = 0;
cnt++;
sum += v[i];
}
}
return cnt <= m;
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
int a; cin >> a;
v.push_back(a);
}
int result = 0;
while (l <= h) {
int mid = (l + h) / 2;
if (check(mid)) {
h = mid - 1;
result = mid;
}
else {
l = mid + 1;
}
}
cout << result;
}
반응형
'백준 > 이분탐색' 카테고리의 다른 글
[백준 1072번 / C++] 게임 (0) | 2022.01.26 |
---|---|
[백준 2776번 / C++] 암기왕 (0) | 2022.01.26 |
[백준 14627번 / C++] 파닭파닭 (0) | 2022.01.25 |
[백준 1561번 / C++] 놀이 공원 (0) | 2022.01.19 |
[백준 6236번 / C++] 용돈 관리 (0) | 2022.01.17 |
댓글