
백준 1654-랜선 자르기(파라메트릭 서치)
파라메트릭 서치는 조건을 만족하는 최적해를 찾음.
접근법
//틀린 풀이
static long bs(){
long l = 1;
//shortest: 가장 짧은 랜선
while(l <= shortest){
if(!isValid(l)) l++;
else{
return --l;
}
}
return 0;
}
//정답 풀이
static long bs(){
long l = 1, r = Arrays.stream(cable).max().getAsLong(), ret = 0;
while(l <= r){
long m = (l + r) / 2;
if(isValid(m)){
ret = m;
l = m + 1;
}else r = m - 1;
}
return ret;
}
처음에는 길이 l을 1씩 늘려가는 선형 탐색을 했습니다. 이후에는 l의 범위를 한정하고, l의 범위 자체를 줄여가는 이분 탐색을 수행했습니다. 또한 결정함수에다가 범위의 최대/최소값의 산술평균인 m을 넘겼습니다.