https://programmers.co.kr/learn/courses/30/lessons/43236
function solution(distance, rocks, n) {
rocks.unshift(0);
rocks.push(distance);
rocks.sort((a, b) => { return a - b; });
console.log(rocks);
let left = 0;
let right = rocks[rocks.length-1];
while (left <= right) {
let mid = Math.floor((left + right) / 2);
let cnt = 0;
let now = 0;
for (var i = 1; i < rocks.length; i++) {
(rocks[i] - now) < mid ? cnt++ : now = rocks[i];
}
cnt > n ? right = mid - 1 : left = mid + 1;
}
// console.log(load);
var answer = right;
return answer;
}
let distance = 25;
let rocks = [2, 14, 11, 21, 17];
let n = 2;
console.log(solution(distance, rocks, n));
어제 푼 입국심사처럼 이분탐색을 이용한 문제다.
rock을 일단 정렬 시키고, left와 right를 각각 시작점 끝점으로 left가 right보다 커지기전가지 반복을 한다.
다 풀고, 답이 계속 안나왔는데, 뭘까 생각해보니까 rocks에 시작 과 끝점을 추가해주고 계산해야한단 것이다.
rocks.unshift(0);
rocks.push(distance);
rocks앞 뒤로 0과 distance를 추가하니 답이 나왔다.