본문 바로가기

ProgramSoliving

프로그래머스 : 징검다리

반응형
import java.util.*;
class Solution {
    public int solution(int distance, int[] rocks, int n) {
        int answer = 0;
        Arrays.sort(rocks);
        int front = 1;
        int rear = distance;
        while(front<=rear){
            int mid = (front + rear)/2;
            int prev=0;
            int cnt = 0;
            for(int rock : rocks){
                if(rock - prev < mid){
                    cnt++;
                }else{
                    prev = rock;
                }
            }
            if(distance - prev < mid)
                cnt++;

            if(cnt > n){
                rear = mid-1;
            }else{
                // cnt <=n 이 후보인 이유는 최소값 mid에 대해서 n보다 작기만 하다면 후보로 속한다.
                // 가량 정답이 15인 녀석이 있는데
                // 15라는 녀석은 cnt가 8 9 일 때 만들 수 있다고 치자 근데 만약 제한값이 9 라고한다면
                // n == cnt 일때만 검사를 한다면 15텀에서 비교햇엇는데 못하고 16~30 에서 조사하기때문에 15에서 찾아야하는 분기점을 놓침
                // 따라서 mid 값을 만들 수 있을 때 n <= cnt라면 후보임 당연히 적을 때도 이값을 구할 수 있으니 후보고 실제로 이값에서 더 커지거나 같아지거나 하는 선택지 빡에없음.
                answer = Math.max(answer,mid);
                front = mid+1;
            }
            
        }
        
        return answer;
    }
}
반응형

'ProgramSoliving' 카테고리의 다른 글

프로그래머스 : 순위  (0) 2020.12.28
프로그래머스 : 가장먼노드  (0) 2020.12.27
프로그래머스 : 단속카메라  (0) 2020.12.23
프로그래머스 : 체육복  (0) 2020.12.23
프로그래머스 : 조이스틱  (0) 2020.12.23