백준/탐색

99클럽 코테 스터디 11일차 TIL - 백준 16401번 : 과자 나눠주기

킴준현 2025. 4. 15. 01:03

✅ 문제

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

✅ 분류

이분탐색

✅ 공부한 내용

 

 

✅ 풀이

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

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 M=Integer.parseInt(st.nextToken());
        int N=Integer.parseInt(st.nextToken());

        int[] snack=new int[N];

        st=new StringTokenizer(br.readLine());
        for(int i=0;i<N;i++){
            snack[i]=Integer.parseInt(st.nextToken());
        }

        Arrays.sort(snack);

        int left=1;
        int right=snack[N-1];

        while(left<=right){
            int mid=(left+right)/2;

            int cnt=0;
            for(int i=0;i<N;i++){
                if(snack[i]>=mid){
                    cnt+=snack[i]/mid;
                }
            }

            // 조카의 수보다 많은 과자를 나누어 줄 수 있다면 과자의 길이를 키울 수 있음
            if(cnt>=M){
                left=mid+1;
            }
            else{
                right=mid-1;
            }
        }

        System.out.println(right);
    }
}