Lv.4 징검다리

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

 

프로그래머스

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

programmers.co.kr

import java.util.Arrays;

class Solution {
    public int solution(int distance, int[] rocks, int n) {
        int[] distances = new int[rocks.length + 1];
        
        Arrays.sort(rocks);
        
        int previousPoint = 0;
        
        for (int i = 0; i < rocks.length; i++) {
            int rock = rocks[i];
            distances[i] = rock - previousPoint;
            previousPoint = rock;
        }
        
        distances[distances.length - 1] = distance - rocks[rocks.length - 1];
        
        int result = binarySearch(distance, rocks, n, distances);
        
        return result;
    }
    
    private int binarySearch(int distance, int[] rocks, int n, int[] distances) {
        int start = 0;
        int end = distance + 1;
        
        while (start < end) {
            int mid = (start + end) / 2;
            if (isValidMinimumDistance(n, distances, mid)) {
                start = mid + 1;
            } else {
                end = mid;
            }
        }
        
        return start - 1;
    }
    
    private boolean isValidMinimumDistance(int n, int[] distances, int minDistance) {
        int temp = 0;
        
        for (int distance : distances) {
            distance += temp;
            if (distance >= minDistance) {
                temp = 0;
                continue;
            }
            if (n-- == 0) {
                return false;
            }
            temp = distance;
        }
        
        return true;
    }
}
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유