728x90
이분탐색을 활용하여 해결하였다.
https://school.programmers.co.kr/learn/courses/30/lessons/43236
이분탐색으로 잡은 부분은 거리이다.
징검다리의 사이 개수의 최소값을 k라고 가정했을때 n개 이하의 돌다리를 제거하여 만들 수 있는지를 파악한 후 가능하다면 k의 값을 늘리고 불가능 하다면 k의 값을 줄이면서 찾아가면 된다.
이때 가능한 최댓값을 찾는 문제이므로 right를 반환해주었다.
function solution(distance, rocks, n) {
rocks=[...rocks.sort((a,b)=>a-b),distance];
const calculateDist = (k) => {
let startDist = 0
let cnt = n
for(let i = 0 ; i < rocks.length;i++){
const curDist = rocks[i]-startDist
if(curDist < k) cnt--
else startDist = rocks[i]
}
if(cnt<0) return false
return true
}
let left = 0;
let right = distance
while(left<=right){
const mid = ~~((left+right)/2)
if(calculateDist(mid)) left = mid+1
else right = mid -1
}
return right
}
728x90
'FrontEnd > 프로그래머스' 카테고리의 다른 글
[JS] 단어퍼즐 (1) | 2024.03.14 |
---|---|
[JS] 가사 검색 (2020 KAKAO BLIND RECRUITMENT) (1) | 2024.03.11 |
[JS] 자동완성 (2018 카카오 3차) (3) | 2024.03.07 |
[JS] 쿠키 구입 (0) | 2024.03.05 |
[JS] 올바른 괄호의 개수 (0) | 2024.03.03 |