알고리즘/프로그래머스

[프로그래머스] 징검다리 건너기 Java 풀이 및 해설

승민아 2024. 5. 14. 09:45

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

 

프로그래머스

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

programmers.co.kr

풀이 방법

0명부터 200000000명을 이분탐색을 통해 n명이 이 다리를 건널 수 있는지 탐색하면 된다.

 

어떻게 풀지 전혀 모르겠는데 검색해보고 이렇게 이분탐색을 사용해서 문제를 푸는구나 신기했다...

 

전체 코드

class Solution {
    public int solution(int[] stones, int k) {
        int answer = 0;
        
        int start = 0;
        int end = 200000000;
        
        while(start<=end) {
            int mid = (start + end) / 2;
            if(isAble(stones, k, mid)) {
                answer = mid;
                start = mid + 1;
            } else {
                end = mid - 1;
            }
        }
        
        return answer;
    }
    
    // stones를 n명이 건널 수 있는가
    boolean isAble(int[] stones, int k, int n) {
        
        int cnt = 0;
        for(int i=0; i<stones.length; i++) {
            if(stones[i] < n)
                cnt++;
            else
                cnt=0;
            
            if(cnt==k)
                return false;
        }
        return true;
    }
}