[JavaScript][Programmers] 징검다리

조준형·2021년 7월 18일
0

Algorithm

목록 보기
43/142
post-thumbnail

🔎 징검다리

❓ 문제링크

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를 추가하니 답이 나왔다.

profile
깃허브 : github.com/JuneHyung

0개의 댓글