알고리즘/백준

16401_과자 나눠주기

베리영young 2024. 10. 30. 00:06

사용 알고리즘: 이분 탐색

사용 언어: java

 

package week21;

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

public class Main {
	static int n, m;
	static int[] arrs;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		
		m = sc.nextInt(); //조카 수
		n = sc.nextInt(); //과자 수
		
		arrs = new int[n];
		for(int i=0; i<n; i++) {
			arrs[i] = sc.nextInt();
		}
		Arrays.sort(arrs);
		
		int left = 1;
		int right = arrs[n-1];
		int ans = 0;
		while(left <= right) {
			int mid = (left+right) / 2;
			int sov = solve(mid);
			if(sov >= m) {
				left = mid +1;
				ans = mid;
			} else {
				right = mid - 1;
			}
		}
		
		System.out.println(ans);
	}

	private static int solve(int mid) {
		int cntBabies = 0;
		for(int i=0; i<n; i++) {
			cntBabies += arrs[i] / mid;
		}
		return cntBabies;
	}

}