https://www.acmicpc.net/problem/1477
1477번: 휴게소 세우기
첫째 줄에 현재 휴게소의 개수 N, 더 지으려고 하는 휴게소의 개수 M, 고속도로의 길이 L이 주어진다. N은 100보다 작거나 같으며, M도 100보다 작거나 같다. L은 100보다 크거나 같고, 1000보다 작거나
www.acmicpc.net
[난이도] Gold4
[유형] 이분탐색
[풀이]
휴게소가 없는 구간의 최댓값을 기준으로 파라메트릭 서치를 해주면 된다.
매 루프마다 나오는 mid값이 휴게소가 없는 구간의 최댓값이며 이 길이를 이용해
휴게소 사이사이에 지을 수 있는 휴게소를 직접 지어보면서 휴게소를 M개 지을 수 있는 것들이
조건에 부업하는 휴게소가 없는 구간의 길이이다. 이 길이가 최댓값이 나올때까지 서치를 진행하면 된다.
#include <cstdio>
#include <algorithm>
using namespace std;
int N,M,L,a[102];
int check(int d){
int ret=0;
for(int i=1;i<=N+1;i++){
int diff = a[i]-a[i-1];
if(diff>d){
if(diff%d==0) ret+=diff/d-1;
else ret+=diff/d;
}
}
return ret;
}
int main(){
scanf("%d%d%d",&N,&M,&L);
a[0]=0;
a[N+1]=L;
for(int i=1;i<=N;i++) scanf("%d",&a[i]);
sort(a,a+N+2);
int l=0;
int r=L;
while(l+1<r){
int mid = (l+r)/2;
int cnt = check(mid);
if(M<cnt) l=mid;
else r=mid;
}
printf("%d",r);
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/1477.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold5] 5430 : AC (C++) (0) | 2021.06.07 |
---|---|
[BOJ/백준][Silver1] 1790 : 수 이어 쓰기2 (C++) (0) | 2021.06.07 |
[BOJ/백준][Silver3] 15990 : 1,2,3 더하기 5 (Kotlin) (0) | 2021.06.07 |
[BOJ/백준][Silver1] 16194 : 카드 구매하기 2 (C++) (0) | 2021.06.07 |
[BOJ/백준][Silver1] 16195 : 1,2,3 더하기 9 (C++) (0) | 2021.06.07 |