링크 → https://www.acmicpc.net/problem/2792
아영
package Baekjoon.java.silver;
import java.util.*;
import java.io.*;
public class boj2792 {
public static void main(String[] args) throws Exception{
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
List<Integer> arr = new ArrayList<>();
for (int i = 0; i < M; i++) {
arr.add(Integer.parseInt(br.readLine()));
}
Collections.sort(arr,Collections.reverseOrder());
int right = arr.get(0);
int left = 1;
int sum = 0;
int answer = 0;
int mid = 0;
while(left<=right){
mid = (right+left)/2;
sum = 0;
for (int i = 0; i < M; i++) {
sum+= Math.ceil((double)arr.get(i)/mid);
}
if(sum>N){
left = mid+1;
}else{
answer = mid;
right = mid-1;
}
}
System.out.println(answer);
}
}
은영
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class baekjoon2792 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()+" ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int arr[] = new int [M];
int start=1;
int end=0;
for (int i = 0; i < M; i++) {
arr[i] = Integer.parseInt(br.readLine());
end = Math.max(end, arr[i]);
}
int ans=0;
while(start<=end) {
int mid = (start+end)/2;
int sum=0;
for (int i = 0; i < M; i++) {
sum+=arr[i]/mid;
if(arr[i]%mid!=0) {
sum++;
}
}
if(sum<=N) {
end = mid-1;
ans=mid;
}else {
start = mid+1;
}
}
System.out.println(ans);
}
}
건
package day_0418;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ2792 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine());
long n = Integer.parseInt(stk.nextToken());
int m = Integer.parseInt(stk.nextToken());
long[] j = new long[m];
for (int i = 0; i < m; i++) {
j[i] = Integer.parseInt(br.readLine());
}
long start = 1;
long end = 1000000000;
long mid = 0, judge = 0;
while (start <= end) {
mid = (start + end) / 2;
judge = 0;
for (int i = 0; i < m; i++) {
if (j[i] % mid == 0) {
judge += j[i] / mid;
} else {
judge += (j[i] / mid) + 1;
}
}
if (judge > n) {
start = mid + 1;
} else {
end = mid - 1;
}
}
System.out.println(start);
}
}
용문
class BJ2792 {
private var N: Int = 0
private var M: Int = 0
private var answer: Int = 0
private var gems: [Int] = []
public func solve() {
readComponents()
calc()
printAnswer()
}
private func readComponents() {
let temp = readLine()?.split(separator: " ").map{ Int($0)! }
self.N = temp![0]
self.M = temp![1]
for _ in 0..<M {
gems.append(Int(readLine()!)!)
}
}
private func calc() {
var left = 1
var right = 0
var mid = 0
for gem in gems {
right = max(gem, right)
}
while left <= right {
mid = (left + right) / 2
var sum = 0
for gem in gems {
sum += gem / mid
if (gem % mid != 0) {
sum += 1
}
}
if sum > N {
left = mid + 1
} else {
right = mid - 1
answer = mid
}
}
}
private func printAnswer() {
print(self.answer)
}
}
BJ2792().solve()