#문제
https://www.acmicpc.net/problem/1654
#작성 코드
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 |