fork download
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. public class Main {
  5. static int N; // 만들고 싶은 랜선 수
  6. static int K; // 가지고 있던 랜선 수
  7. static int[] cable; // 각 랜선의 길이
  8.  
  9. static int result;
  10. public static void main(String[] args) throws Exception{
  11. StringTokenizer st = new StringTokenizer(br.readLine());
  12.  
  13. N = Integer.parseInt(st.nextToken());
  14. K = Integer.parseInt(st.nextToken());
  15. cable = new int[N];
  16.  
  17. for(int i = 0; i< N; i++){
  18. cable[i] = Integer.parseInt(br.readLine());
  19. }
  20. Arrays.sort(cable); // 오름차순 정렬
  21.  
  22. // 범위내에서 최대값 찾기
  23. findMax(0, Integer.MAX_VALUE);
  24. System.out.println(result);
  25. br.close();
  26. }
  27.  
  28. public static void findMax(int left, int right){
  29. int mid = (left+right)/2;
  30.  
  31. // 탈출 조건 - 애매함..
  32. if(left > right) return;
  33.  
  34. long count = 0 ;
  35. for(int i = 0; i < N ; i++){
  36. count += cable[i]/mid;
  37. }
  38. if(count >= K){
  39. // 지금 길이가 답일수도 있고, 더 길수도 있음.
  40. result = mid; // 답일수도 있으니까 저장
  41. findMax(mid + 1, right);
  42. }else{
  43. findMax(left, mid-1);
  44. }
  45. }
  46. }
  47.  
Success #stdin #stdout 0.08s 51568KB
stdin
4 11
802
743
457
539
stdout
200