1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그
www.acmicpc.net
평범한 이분탐색 문제이다.
long long int와 N보다 같거나 큰 조건을 주의하자.
#include <cstdio>
#include <algorithm>
using namespace std;
int main(void){
long long int K, N, answer, maxi = -1;
scanf("%lld %lld", &K, &N);
long long int wire[K];
for(int i=0; i<K; i++){
scanf("%lld", &wire[i]);
maxi = max(wire[i], maxi);
}
long long int left = 1, right =maxi, mid;
while(left<=right){
int ans = 0;
mid = (left +right)/2;
for(int i=0; i<K; i++)
ans += wire[i]/mid;
if(ans >= N){
answer = mid;
left = mid +1;
}
else
right = mid - 1;
}
printf("%lld", answer);
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 2606번] 바이러스 (Silver 3) (0) | 2020.09.22 |
---|---|
[C/C++ 백준 1260번] DFS와 BFS (Silver 2) (0) | 2020.09.22 |
[C/C++ 백준 10773번] 제로 (Silver 4) (0) | 2020.09.19 |
[C/C++ 백준 11722번] 가장 긴 감소하는 부분 수열 (Silver 2) (0) | 2020.09.19 |
[C/C++ 백준 2852번] NBA 농구 (Silver 3) (0) | 2020.09.17 |