-
[백준 11497번] 통나무 건너뛰기(자바)Algorithm/Greedy Algorithm 2022. 3. 17. 20:08
백준알고리즘 11497번 : 통나무 건너뛰기
두 통나무 간의 최대 높이의 차를 최소한으로 줄여야하는 문제이다.
다만 통나무가 원형으로 이어져있으므로 단순 정렬만으로는 N[0] 과 N[N.length-1] 간의 차이가 극대화되므로 오답이 발생한다.
나는 통나무간의 간격을 줄이기 위해서는
최저점 N[0]과 최고점 N[N.length-1] 간의 지점들을 두 부류로 나누어서 찾아야한다고 생각했다.
즉 최저점과 최고점을 연결하는 선이 두개가 되도록 해야, 최대 높이의 차를 줄일수 있다고 판단하였다.
따라서 N[0], N[2], N[4] ... N[N.length-1] 간의 비교와
N[0], N[1], N[3] ... N[N.length-1] 간의 비교를 동시에 해주도록하였다.풀이 과정
1. 통나무 목록을 오름차순으로 정렬한다.
2. 홀수번째의 통나무간의 최대 높이 차를 계산하고, 짝수번쨰의 통나무간의 최대 높이 차를
계산하여 가장 큰 높이가 정답이 되도록 한다.
3. 이 때 홀수번째 통나무든 짝수번째 통나무든 0번째 통나무, 그리고 N.length-1(가장 긴)번째
통나무와의 비교는 항상 있어야한다. 즉, 홀수번째끼리 비교도 필요하지만
(3번째와 1번째, 5번째와 3번째..) 1번째와 0번째의 비교도 필수적이며 7번째와 8번째의 비교도
필요하다는 의미이다.
이를 유념하여 비교해주어, 추출된 최댓값을 출력한다.▽ 정답 소스 보기
더보기import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main {// No11497 통나무 건너뛰기 public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int tc = Integer.parseInt(br.readLine()); for (int i = 0; i < tc; i++) { int nums = Integer.parseInt(br.readLine()); StringTokenizer st = new StringTokenizer(br.readLine()); int[] arr = new int[nums]; for (int j = 0; j < nums; j++) { arr[j] = Integer.parseInt(st.nextToken()); } Arrays.sort(arr); int strt = arr[arr.length - 1] - arr[arr.length - 2] > arr[1] - arr[0] ? arr[arr.length - 1] - arr[arr.length - 2] : arr[1] - arr[0]; for (int j = 2; j < arr.length; j += 2) { if (arr[j] - arr[j - 2] > strt) { strt = arr[j] - arr[j - 2]; } } for (int j = 3; j < arr.length; j += 2) { if (arr[j] - arr[j - 2] > strt) { strt = arr[j] - arr[j - 2]; } } System.out.println(strt); } } }
'Algorithm > Greedy Algorithm' 카테고리의 다른 글
[백준 1041번] 주사위 (자바) (0) 2022.04.08 [백준 12904번] A와 B (자바) (0) 2022.03.18 [백준 15903번] 카드 합체 놀이(자바) (0) 2022.03.16 [백준 2212번] 센서(자바) (0) 2022.03.12 [백준 2437번] 저울 (Java 풀이) (0) 2022.03.11