링크 → https://www.acmicpc.net/problem/1654
아영
package Baekjoon.java.silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class boj1654 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int K = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
double[] lan = new double[K];
for (int i = 0; i < K; i++) {
lan[i] =Integer.parseInt(br.readLine());
}
Arrays.sort(lan);
long left = 1;
long right = (long)lan[K-1];
long answer = 0;
while(left<=right){
long mid = (left+right)/2;
long cut = 0;
for (int i = 0; i < K; i++) {
cut += Math.floor(lan[i]/mid);
if(cut>=N){
answer= mid;
left = mid+1;
break;
}
}
if(cut<N){
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 baekjoon1654 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st= new StringTokenizer(br.readLine()+" ");
int K = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
int arr[] = new int[K];
long start=1;
long end=0;
for (int i = 0; i < K; i++) {
arr[i] = Integer.parseInt(br.readLine());
end = Math.max(end, arr[i]);
}
while(start<=end) {
long mid = (start+end)/2;
long cnt=0;
for (int i = 0; i < K; i++) {
cnt+=(arr[i]/mid);
}
if(cnt<N) {
end=mid-1;
}
else {
start = mid+1;
}
}
System.out.println(end);
}
}
건
package day_0424;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ1654 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine());
int k = Integer.parseInt(stk.nextToken());
int n = Integer.parseInt(stk.nextToken());
long[] lan = new long[k];
for (int i = 0; i < k; i++) {
lan[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(lan);
long start = 1, end = lan[k-1], mid = 0, sum = 0;
while(start <= end) {
mid = (start + end) / 2;
sum = 0;
for (int i = 0; i < k; i++) {
sum += lan[i] / mid;
}
if (sum < n) {
end = mid - 1;
} else {
start = mid + 1;
}
}
System.out.println(end);
}
}
용문
class BJ1654 {
private var K: Int = 0
private var N: Int = 0
private var cables: [Int64] = []
private var answer: Int64 = 0
func solve() {
readComponents()
calc()
writeAnswer()
}
private func readComponents() {
let temp = readLine()!.split(separator: " ").map { Int($0)! }
self.K = temp[0]
self.N = temp[1]
for _ in 0..<K {
cables.append( Int64(readLine()!)! )
}
}
private func calc() {
var high: Int64 = .max
var low: Int64 = 0
for cable in cables {
high = max(high, cable)
}
while low < high {
let mid: Int64 = (low + high) / 2
var count: Int64 = 0
for cable in cables {
count += cable / mid
}
if count < N {
high = mid
} else {
low = mid + 1
answer = max(answer, mid)
}
}
}
private func writeAnswer() {
print(answer)
}
}
BJ1654().solve()