FrontEnd/프로그래머스

[JS] 징검다리

728x90

이분탐색을 활용하여 해결하였다.

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/43236

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

이분탐색으로 잡은 부분은 거리이다.

 

징검다리의 사이 개수의 최소값을 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