https://www.acmicpc.net/problem/17266
풀이
가로등의 높이를 조정하여 길을 모두 비추도록 하는 문제였다.
따라서 가로등의 높이를 기준으로 이분탐색을 진행했다.
이분탐색의 mid값을 현재 체크할 높이로 하여 check메서드를 수행했고,
마지막 지점까지 비추는 것을 확인하기 위해 `return prev >= N` 으로 처리했다.
메모리: 25084KB
시간: 316ms
언어: Java 11
import java.util.*;
import java.io.*;
public class Main {
static int N, M;
static int[] arr;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
M = Integer.parseInt(br.readLine());
arr = new int[M];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < M; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int left = 1;
int right = N;
while (left < right) {
int mid = (left + right) / 2;
if (check(mid)) {
right = mid;
} else {
left = mid + 1;
}
}
System.out.println(left);
}
private static boolean check(int mid) {
int prev = 0;
for (int i = 0; i < M; i++) {
if (arr[i] - mid <= prev) {
prev = arr[i] + mid;
} else {
return false;
}
}
return prev >= N;
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 2607: 비슷한 단어 - JAVA (0) | 2024.05.17 |
---|---|
[백준] 17484: 진우의 달 여행 (Small) - JAVA (1) | 2024.05.17 |
[백준] 19941: 햄버거 분배 - JAVA (0) | 2024.05.17 |
[백준] 5638: 수문 - JAVA (0) | 2024.05.17 |
[백준] 25688: 빠른 무작위 숫자 탐색 - JAVA (0) | 2024.05.17 |
[백준] 9017: 크로스 컨트리 - JAVA (0) | 2024.05.17 |