# 분류 : 이진 탐색

# 최대 랜선 길이를 찾는 것이므로, count가 조건과 같다고 return 하여 문제를 접근하였으나 틀렸고 Count를 맞춰도 최대 길이를 찾아야 하기 때문에 추가적으로 left = Middle + 1 로 주어 진행하여야 한다. 단위가 크므로 long 타입을 쓰지 않으면 틀림


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int K = Integer.parseInt(st.nextToken());
		int N = Integer.parseInt(st.nextToken());
		
		int arr[] = new int[K];
		
		
		for(int i=0; i<K; i++)
			arr[i] = Integer.parseInt(br.readLine());
		
		Arrays.sort(arr);
		
		long left = 1;
		long right = arr[K-1];
		long middle=0;
		
		while(left<=right) {
			
			long cnt=0;
			
			middle = (left+right)/2;
			
			for(int i=0; i<K; i++) {
				cnt+= arr[i]/middle;
			}
			
			if(cnt < N) {
				right = middle-1;
			}else if(cnt >= N) {
				left = middle+1;
			}
		}
		System.out.println(right);
		
	}
}

+ Recent posts