마구간 정하기(결정알고리즘)

brightvvater·2023년 3월 14일

내풀이>

import java.util.*;
public class Main {
    public int count(int[] arr, int capacity) {
        int cnt = 1;
        int idx = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] - arr[idx] >= capacity) {
                cnt++;
                idx = i;
            }
        }
        return cnt;
    }
    public int solution(int n, int c, int[] arr) {
        int answer = 0;
        Arrays.sort(arr);
        int rt = arr[n - 1]; //9
        int lt = Arrays.stream(arr).max().getAsInt();  //1
        for (int i = 0; i < n-1; i++) {
            lt = Math.min(arr[i+1]-arr[i], lt);
        }
        while (lt <= rt) {
            int mid = (rt+lt)/2; //5
            if (count(arr, mid) < c) { //mid 거리로 둘수 있는 말의 수
                rt = mid-1;
            }else{
                answer = mid;
                lt = mid+1;
            }
        }
        return answer;
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int c = kb.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = kb.nextInt();
        }
        System.out.println(T.solution(n, c, arr));
        }
}
profile
코딩을 잘하고 싶은 입문자

0개의 댓글