반응형
1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그
www.acmicpc.net
풀기싫어...
#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 |
댓글