반응형
풀기싫어...
#include<iostream>
using namespace std;
int K, N;
unsigned int ans;
int search(unsigned int left, unsigned int right, unsigned int LAN[]) {
int cnt = 0;
if(left > right) {
return -1;
}
unsigned int mid = (left + right) / 2;
for(int i = 0; i < K; i++) {
cnt += LAN[i] / mid;
}
if(cnt >= N) {
// 자른 갯수가 만들어야 하는 갯수보다 많다면
ans = max(mid, ans);
return search(mid + 1, right, LAN);
} else {
// 자른 갯수가 만들어야 하는 갯수보다 적다면
return search(left, mid - 1, LAN);
}
}
int main() {
cin >> K >> N;
unsigned int LAN[K];
int sum = 0;
int maxLan = 0;
for(int i = 0; i < K; i++) {
cin >> LAN[i];
sum += LAN[i];
maxLan = maxLan < LAN[i] ? LAN[i] : maxLan;
// 1부터 최대값까지 탐색을 진행하기 위해 최댓값을 구함.
}
search(1, maxLan, LAN);
// 최소 길이부터 최대 길이까지 탐색 진행.
cout << ans << endl;
return 0;
}
반응형
'BaekJoon > C++' 카테고리의 다른 글
1920 : 수 찾기 (C++) (0) | 2021.02.11 |
---|---|
2805 : 나무 자르기 (C++) (0) | 2021.02.10 |
1987 : 알파벳 (C++) (0) | 2021.02.09 |
1934 : 최소공배수 (C++) (0) | 2021.02.09 |
1010 : 다리 놓기 (C++) (0) | 2021.02.09 |
댓글