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번 이상 나오게 되면 그 가정은 틀린 것이다.
그에따라 다시 범위를 더 좁혀가며 이분탐색을 반복한다.