개발/C++

[BOJ] 1654 - 랜선 자르기

차파랑 2021. 12. 30. 20:13
#include<stdio.h>

int main(){
    int k, n;
    scanf("%d %d", &k, &n);

    long long int* lengths = new long long int[k];
    long long int sum = 0;
    for(int i = 0; i < k; i++){
        scanf("%d", &lengths[i]);
        sum += lengths[i];
    }

    long long int maxLength = sum / n;
    long long int minLength = 1;
    long long int result = 0;

    while(maxLength >= minLength){
        long long int mid = (maxLength + minLength) / 2;
        long long int sum = 0;
        for(int i = 0; i < k; i++){
            sum += lengths[i] / mid;
        }
        if(sum < n){
            maxLength = mid - 1;
        } else {
            result = mid;
            minLength = mid + 1;
        }
    }

    printf("%d\n", result);
}