PS/inflearn java coding

결정알고리즘 연습 2

easy16 2022. 4. 10. 20:06
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;




class Main {

	static int answer = 0;
	
	public static void main(String args[]) throws Exception {
		
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int m = in.nextInt();
		
		int [ ]arr = new int[n];
		
		for ( int i = 0 ; i < n ; i++) {
			arr[i] = in.nextInt();			
		} 
		
		//마구간의 좌표를 정렬
		Arrays.sort(arr);
		// 최소간격을 1
		int lt = 1;
		// 최대 간격을 MAX , MIN 의 차이 값으로 설정한다.
		int rt = Arrays.stream(arr).max().getAsInt() - Arrays.stream(arr).min().getAsInt();
		int max = Integer.MIN_VALUE;
		
		
		while (lt <= rt) {
			int mid = (lt + rt)/2;
						
			//첫번째 말은 첫번째 구간에 배치한다.
			int cnt = 1;
			int horse = arr[0];
			for ( int i = 1 ; i < n ; i++) {
				//순회하면서 구간조건을 충족하는 곳에 말을 배치한다.
				if ( arr[i] - horse >= mid ) {
					horse = arr[i];
					cnt++;
				} 
			}			
			//말을 m마리 이상 배치할 수 있는 경우 중 구간(mid)의 최대값이 최적화된 값이 된다.
			if ( cnt >= m ) {
				max = Math.max(max, mid);
				lt = mid + 1;
			} else // 구간에서 정해진 말을 배치하지 못한 경우는 구간을 감소시킨다. 
				rt = mid - 1;			
		}
		
		
		System.out.println(max);
	}
		
		
	
}

ex)
input 
5 3
1 2 8 4 9

output
3