이 문제 패턴은 한 번 봤다. 백준의 공유기 설치 문제와 굉장히 닮았다. 예전에 할 때도 못풀었던 것 같은데 여전히 힘들었다. 답을 봤는데도 어려운 문제. 이분탐색의 핵심은 한 문장으로 정리된다.
이분탐색의 핵심은 먼저 답을 정해놓고 그 답이 맞는지 찾아나간다.
https://programmers.co.kr/learn/courses/30/lessons/43236
function solution(distance, rocks, n) {
rocks = [0, ...rocks.sort((a, b) => a - b), distance];
let left = 0,
right = distance;
while (left <= right) {
let mid = Math.floor((right + left) / 2),
count = 0,
now = 0;
// * 이분탐색 실행
// ! 1부터 시작해야 0번 돌과 1번 돌의 거리를 계산할 수 있음
for (let i = 1; i < rocks.length; i++) {
if (rocks[i] - now < mid) {
count++;
} else {
now = rocks[i];
}
}
// * 이분탐색 판별
if (count > n) right = mid - 1;
else left = mid + 1;
}
return right;
}
console.log(solution(25, [2, 14, 11, 21, 17], 2));
https://gwang920.github.io/algorithm/progreammers-2-43236/
https://velog.io/@injoon2019/알고리즘-백준-2110-공유기-설치