프로그래밍 공방

[프로그래머스] 징검다리 건너기 본문

개발/문제해결

[프로그래머스] 징검다리 건너기

hyosupsong 2021. 2. 28. 22:44

문제

programmers.co.kr/learn/courses/30/lessons/64062

 

코딩테스트 연습 - 징검다리 건너기

[2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3

programmers.co.kr

문제해결방법

이 문제는 니니즈 친구들의 수를 기준으로 이진탐색을 해서 최대로 가능한 인원을 구해주었다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package Programmers;
 
public class Solution_징검다리건너기 {
 
    public static boolean isCross(int[] stones, int count, int k) {
        int stone = 0;
        for(int i=0; i<stones.length; i++) {
            if(stones[i]<count) stone++;
            else stone = 0;
            if(stone>=k) return false;
        }
        return true;
    }
    
    public static int solution(int[] stones, int k) {
        int s = Integer.MAX_VALUE;
        int e = Integer.MIN_VALUE;
        for(int i=0; i<stones.length; i++) {
            if(s>stones[i]) s = stones[i];
            if(e<stones[i]) e = stones[i];
        }
        while(s<=e) {
            int m = (s+e)>>1;
            if(isCross(stones, m, k)) s = m+1;
            else e = m-1;
        }
        int answer = s-1;
        return answer;
    }
    
    public static void main(String[] args) {
        int[] stones = {2453214251};
        int k = 3;
        System.out.println(solution(stones, k));
    }
}
cs


코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.