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
'Algorithm > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 2075๋ฒ N๋ฒ์งธ ํฐ ์ - JAVA(์๋ฐ) (0) | 2023.10.16 |
---|---|
[BOJ] 2110๋ฒ ๊ณต์ ๊ธฐ ์ค์น - JAVA(์๋ฐ) (0) | 2023.09.14 |
[BOJ] 2805๋ฒ ๋๋ฌด ์๋ฅด๊ธฐ - JAVA(์๋ฐ) (0) | 2023.09.12 |
[BOJ] 10825๋ฒ ๊ตญ์์ - JAVA(์๋ฐ) (0) | 2023.08.07 |
[BOJ] 1002๋ฒ ํฐ๋ - JAVA(์๋ฐ) (0) | 2023.08.03 |