알고리즘

파라메트릭 서치 (BOJ 1477)

E재HO 2023. 8. 13. 23:19

import java.io.*;
import java.util.*;

public class Main {
    static int L,R;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        R= Integer.parseInt(st.nextToken());

        int [] arr = new int[N+2];
        arr[0]=0;
        arr[N+1]=R;
        st = new StringTokenizer(br.readLine());
        for(int i=1; i<=N; i++){
            arr[i]= Integer.parseInt(st.nextToken());
        }

        Arrays.sort(arr);
        System.out.println(binarySearch(arr, N, M));
    }

    private static int binarySearch(int[]arr, int N, int M){

        int left = 1;
        int right = R-1;
        while(left<=right){
            int mid =(left+right)/2;
            int cnt = 0;

            for(int i =1; i<N+2; i++) cnt+= (arr[i]-arr[i-1] -1)/mid;


            if(cnt>M) left = mid+1;
            else right = mid -1;
        }
        return left;
    }
}