링크 → https://www.acmicpc.net/problem/3079
아영
package Baekjoon.java.silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.StringTokenizer;
public class boj3079 {
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());
long answer = Long.MAX_VALUE;
int[] T = new int[N];
for (int i = 0; i < N; i++) {
T[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(T);
long left = 0;
long right = Long.MAX_VALUE;
while(left<=right){
long mid = (left+right)/2;
if(answer < mid) break;
long cnt = 0;
for (int j = 0; j < N; j++) {
if(mid<T[j]) break;
if(cnt>=M) break;
cnt += mid/T[j];
}
if(cnt>=M){
right = mid-1;
answer = mid;
}else{
left = mid+1;
}
}
System.out.println(answer);
}
}
은영
건
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 BOJ3079 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine());
int n = Integer.parseInt(stk.nextToken());
long m = Long.parseLong(stk.nextToken());
long[] desk = new long[n];
for (int i = 0; i < n; i++) {
desk[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(desk);
long start = 1, end = desk[n-1] * m, mid = 0, sum = 0;
while(start <= end) {
mid = (start + end) / 2;
sum = 0;
for (int i = 0; i < n; i++) {
sum += mid / desk[i];
}
if (sum < m) {
start = mid + 1;
} else {
end = mid - 1;
}
}
System.out.println(start);
}
}
용문
class BJ3079 {
private var N: Int = 0
private var M: Int = 0
private var gates: [Int64] = []
private var answer: Int64 = .max
func solve() {
readComponents()
calc()
writeAnswer()
}
private func readComponents() {
let temp = readLine()!.split(separator: " ").map { Int($0)! }
self.N = temp[0]
self.M = temp[1]
for _ in 0..<N {
gates.append( Int64(readLine()!)! )
}
}
private func calc() {
var low: Int64 = 1
var high: Int64 = -1
for gate in gates {
high = max(high, gate)
}
high *= Int64(M)
while low < high {
let mid: Int64 = (low + high) / 2
var count: Int64 = 0
for gateTime in gates {
count += mid / gateTime
}
if count < M {
low = mid + 1
} else {
answer = min(answer, mid)
high = mid
}
}
}
private func writeAnswer() {
print(answer)
}
}
BJ3079().solve()