알고리즘

백준 13702번 이상한 술집 (JAVA)

박카스마시며코딩 2023. 1. 20. 11:41

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

 

13702번: 이상한 술집

프로그래밍 대회 전날, 은상과 친구들은 이상한 술집에 모였다. 이 술집에서 막걸리를 시키면 주전자의 용량은 똑같았으나 안에 들어 있는 막걸리 용량은 랜덤이다.  즉 한 번 주문에 막걸리 용

www.acmicpc.net

 

 

 

package BOJ.binarysearch;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_13702 {

    private static final int INF = Integer.MAX_VALUE;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        Function<String,Integer> stoi = Integer::parseInt;
        int n = stoi.apply(st.nextToken());
        int k = stoi.apply(st.nextToken());
        int[] arr = new int[n];
        for(int i = 0 ; i < n ; i++){
            arr[i] = stoi.apply(br.readLine());
        }
        int result = binarySearch(arr,n,k);
        System.out.println(result);
    }
    private static int binarySearch(int[] arr, int n,int k){
        int start = 0;
        int end = INF;
        int result = 0;
        while(start <= end){
            int mid = (int)(((long)end + start) / 2);
            int sum = 0;
            for(int num : arr){
                int div = num / mid;
                sum += div;
            }
            if(sum >= k){
                result = Math.max(result, mid);
                start = mid + 1;
            }else if(sum < k){
                end = mid - 1;
            }
        }
        return result;
    }
}