반응형
[광고 누르면 오늘의 행운 상승!!]
이분탐색 문제
1. long으로 지정해 주어야 오버플로우가 발생하지 않는다.
2. mid 를 left + right가 아니라 left + (right - left)/2 로 지정하였다.
left+right는 오버플로우가 발생할 가능성이 있다.
3. isImpossible을 이용하여 최소시간을 구해나간다.
import java.io.*;
import java.util.*;
public class Main {
static long n, m;
static long[] time;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Long.parseLong(st.nextToken());
m = Long.parseLong(st.nextToken());
time = new long[(int) n];
long max = 0;
for (int i = 0; i < n; i++) {
time[i] = Long.parseLong(br.readLine());
max = Math.max(max, time[i]);
}
binarySearch(max * m);
}
private static void binarySearch(long r) {
long left = 1;
long right = r;
long result = right;
long mid = 0;
while (left <= right) {
mid = left + (right - left) / 2;
if (isPossible(mid)) {
result = Math.min(result, mid);
right = mid - 1;
} else {
left = mid + 1;
}
}
System.out.println(result);
}
private static boolean isPossible(long t) {
long temp = 0;
for (int i = 0; i < n; i++) {
temp += t / time[i];
}
return temp >= m;
}
}
반응형
'2. 알고리즘사이트 > 1. 백준' 카테고리의 다른 글
아기 상어 [백준 16236][JAVA][골드 5][BFS][시뮬레이션][PQ] (0) | 2020.04.01 |
---|---|
미친 로봇 [백준 1405][Java][DFS][확률] (0) | 2020.03.30 |
움직이는 미로 탈출 [백준 16954][Java][BFS] (0) | 2020.03.30 |
거울 설치 [백준 2151][JAVA][골드5][시뮬레이션][BFS][DP] (0) | 2020.03.24 |
피카츄 [백준 14405][JAVA][실버 3][String] (0) | 2020.03.24 |