백준

백준 이분탐색 - 1654번 : 랜선 자르기

맴썰 2022. 2. 28. 16:23

https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		st = new StringTokenizer(br.readLine());
		int k = Integer.parseInt(st.nextToken());
		int n = Integer.parseInt(st.nextToken());
		long[] lans = new long[k];
		for(int i=0; i<k; i++) {
			st = new StringTokenizer(br.readLine());
			lans[i] = Integer.parseInt(st.nextToken());
		}
		Arrays.sort(lans);
		long maxlen = 0;
		long htarget = lans[k-1];
		long ltarget = 1;
		while(true) {
			if(ltarget>htarget) break;
			int sum = 0;
			long mid = (htarget+ltarget)/2;
			for(int i=0; i<k; i++) {
				sum+=lans[i]/mid;
			}
			if(sum>=n) {
				maxlen = mid;
				ltarget=mid+1;
			}
			else if(sum<n) {
				htarget=mid-1;
			}
		}
		bw.write(maxlen+"");
		bw.close();
	}
}