징검다리 건너기 javascript

HyosikPark·2021년 3월 29일
0

알고리즘

목록 보기
70/72
function binarySearch(min, max, stones, k) {
    outer: while(min <= max) {
        const mid = parseInt((min + max) / 2);
        let cnt = 0;
        
        for (let e of stones) {
            if (e <= mid) {
                cnt++;
            } else {
                cnt = 0;
            }
            
            if (cnt >= k) {
                max = mid - 1;
                continue outer;
            }
        }
        
        min = mid + 1;
    }
    
    return min;
}

function solution(stones, k) {
    return binarySearch(0,200000000, stones, k)
}

해설

이분탐색으로 접근해서 푸는 것이 효율적이다.
min : 다리를 건널 수 있는 최소 명
max : 다리를 건널 수 있는 최대 명
mid : 다리를 건넜다고 가정할 명 수

다리를 100명 건넜다고 가정하였을 때 실제 100명이 건널 수 있었는지 확인하려면 기존 stone 각 요소 -100을 계산했을 때 0보다 작은 값이 연속으로 k번 이상 나오게 되면 그 가정은 틀린 것이다.

그에따라 다시 범위를 더 좁혀가며 이분탐색을 반복한다.

0개의 댓글