#문제
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 |