Algorithm/Problem Solving
[BOJ] 1654๋ฒ ๋์ ์๋ฅด๊ธฐ - JAVA(์๋ฐ)
gangintheremark
2023. 9. 12. 17:44
728x90
๐ก ์ด๋ถํ์(Binary Search) ๋ฌธ์
โ ๊ตฌํ๊ณ ์ ํ๋ ๊ฒ : N๊ฐ๋ฅผ ๋ง๋ค ์ ์๋ ๋์ ์ต๋ ๊ธธ์ด
- lt = 1
- rt = ๋์ ๊ธธ์ด ์ค ๊ฐ์ฅ ๊ธด ๊ฐ โ lt ~ rt ์ฌ์ด์ ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ด ํ์คํ๊ฒ ์๋ค.
์๋ฅผ ๋์ ์ ๊ธธ์ด๊ฐ mid์ด๋ฉด ๋ต์ผ๋ก์จ ๊ฐ๋ฅํ ์ซ์์ธ๊ฐ ๊ฒ์ฆ โ ์ป์ ์ ์๋ ๋์ ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํจ์ ์์ฑ
- ์ป์ ์ ์๋ ๋์ ์ ๊ฐ์๊ฐ N๊ฐ ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์๋ฅผ ๋์ ์ ๊ธธ์ด๋ฅผ ๋๋ ค๋ ๋จ
lt=mid+1
- ๋ฐ๋๋ฉด ๋์ ์ ๊ธธ์ด ์ค์ด๊ธฐ
rt=mid-1
๐จ๐ป๐ป ์คํ์ฝ๋
import java.util.*;
import java.io.*;
public class Main {
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static StringTokenizer st;
private static StringBuilder sb = new StringBuilder();
private static int n, k;
private static int[] arr;
public static long count(long len) {
long sum = 0;
for(int i : arr) {
sum += i / len;
}
return sum;
}
public static void main(String[] args) throws IOException {
st = new StringTokenizer(br.readLine());
k = Integer.parseInt(st.nextToken());
n = Integer.parseInt(st.nextToken());
arr = new int[k];
int max = 0;
for (int i = 0; i < k; i++) {
arr[i] = Integer.parseInt(br.readLine());
max = max < arr[i] ? arr[i] : max;
}
long answer = 0;
long lt = 1;
long rt = max;
while(lt <= rt) {
long mid = (lt + rt) /2;
if(count(mid) >= n) {
answer = mid;
lt = mid + 1;
} else {
rt = mid - 1;
}
}
System.out.println(answer);
}
}
728x90