#문제

https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 후 K줄에 걸쳐 이미 가지고 있는 각 랜선의 길이가 센티미터 단위의 정수로 입력된다. 랜선의 길이는 231-1보다 작거나 같은 자연수이다.

www.acmicpc.net

 

#작성 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
 
int n, k;
long long int lan[10000];
 
int main(){
    cin>>n>>k;
    long long int high=0;
    for(int i=0; i<n; i++){
        cin>>lan[i];
        high = max(high, lan[i]);
    }
    sort(lan, lan+n);
    int low = 1;
    long long int maxlength=0;
    while( low<=high ){
        long long int mid = (low+high)/2;
        if( mid==0 ) break;
        
        int lannum=0;
        for(int i=0; i<n; i++){
            lannum += lan[i]/mid;
        }
        
        if( lannum>=k ){
            maxlength = max(maxlength, mid);
            low = mid+1;
        }
        else{
            high = mid-1;
        }
    }
    
    cout<<maxlength<<'\n';
    return 0;
}
cs

##

k=1일 때 가능한 최대 길이는 주어진 랜선 길이 중 가장 긴 것.

k=?일 때 가능한 최대 길이는 1.

-> 1 ~ 주어진 가장 긴 랜선 길이를 이분탐색하며 정답 조건을 만족하는 길이를 찾아나간다.

'BOJ' 카테고리의 다른 글

BOJ 2805번 :: 나무 자르기  (0) 2019.12.30
BOJ 10866번 :: 덱  (0) 2019.12.28
BOJ 2049번 :: 피보나치 수 3  (0) 2019.12.28
BOJ 10830번 :: 행렬 제곱  (0) 2019.12.27
BOJ 10816번 :: 숫자 카드 2  (0) 2019.12.27

+ Recent posts