문제
문제 해석
- 입력에서 주어진 K개의 랜선을 일정한 길이로 잘라 N 개 이상의 랜선을 만드는 것이 목적이다.
알고리즘
- 이진 탐색으로 쉽게 해결 할 수 있다.
- 길이가 존재 해야 하므로 low 는 1, high 는 이미 가지고 있는 K 개의 랜선중 가장 길이가 긴 것으로 지정 하면 된다.
- 이 후 mid 길이만큼 실제로 랜선을 잘라 보면서 N 과 비교 해 low 나 high 를 조절 하면 된다.
코드
#include <iostream>
#include <vector>
using namespace std;
int K, N, ans;
long long low, high, mid;
vector<int> input;
int main(){
cin >> K >> N;
for(int i = 0; i < K; i++){
int tmp;
cin >> tmp;
if(high < tmp){
high = tmp;
}
input.push_back(tmp);
}
low = 1;
ans = 0;
while(low <= high){
mid = (low + high) / 2;
int cnt = 0;
for(int i = 0; i < K; i++){
cnt += input[i]/mid;
}
if(cnt >= N){
low = mid + 1;
if(ans < mid){
ans = mid;
}
} else {
high = mid - 1;
}
}
cout << ans << '\n';
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
백준_1389 : 케빈 베이컨의 6단계 법칙 - C++ (0) | 2023.05.19 |
---|---|
백준_1260 : DFS 와 BFS - C++ (0) | 2023.05.19 |
백준_1436 : 영화감독 숌 - C++ (0) | 2023.05.19 |
백준_1074 : Z - C++ (0) | 2023.05.16 |
백준_1259 : 팰린드롬수 - C++ (0) | 2023.05.16 |