백준 16401 java : 이분탐색

magicdrill·2025년 10월 29일

백준 문제풀이

목록 보기
662/673

백준 16401 java : 이분탐색

import java.util.Scanner;

public class bj16401 {
    static int N, M;
    static int [] snacks;

    public static void main(String[] args) {
        inputData();
        System.out.println(findAnswer());
    }

    public static void inputData(){
        Scanner sc = new Scanner(System.in);
        int i;

        M = sc.nextInt();//조카의 수
        N = sc.nextInt();//과자의 수
        snacks = new int[N];
        for(i = 0; i < N; i++){
            snacks[i] = sc.nextInt();
        }

        sc.close();
    }

    static boolean canMake(int len) {
        if (len == 0){
            return true;
        }

        long pieces = 0;

        for (int s : snacks) {
            pieces += (s / len);

            if (pieces >= M) {
                return true;
            }
        }
        return false;
    }

    public static int findAnswer() {
        int lo = 1, hi = 0, ans = 0;

        for (int s : snacks){
            hi = Math.max(hi, s);
        }

        while (lo <= hi) {
            int mid = lo + (hi - lo) / 2;

            if (canMake(mid)) {
                ans = mid;
                lo = mid + 1;
            }
            else {
                hi = mid - 1;
            }
        }
        return ans;
    }
}

0개의 댓글