Problem Solving/Baekjoon

[백준] 11497 통나무 건너뛰기 - Greedy / Java

graycode 2023. 2. 12. 13:05

 문제 링크

 

11497번: 통나무 건너뛰기

남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이

www.acmicpc.net

 

 풀이 과정

첫 통나무와 마지막 통나무가 인접해 있다는 조건에 의해, [ 1, 3, 4, 6, 8 ] 의 최소 난이도의 배열을 구하자면

가장 큰 값을 중앙에 기준으로 두고, 양쪽에 점점 작게 배치하여 [ 3, 6, 8, 4, 1 ] 와 같이 구할 수 있다.

 

이는 입력받은 수를 정렬 후, 각 인덱스의 차가 2인 수들을 비교하여 최대값을 갱신해, 해당 값이 최소 난이도가 된다.

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        int t = Integer.parseInt(br.readLine());

        while (t-- > 0) {
            int n = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());

            int[] arr = new int[n];
            for (int i = 0; i < n; i++)
                arr[i] = Integer.parseInt(st.nextToken());

            Arrays.sort(arr);

            int max = 0;
            for (int i = 0; i < n - 2; i++)
                max = Math.max(max, arr[i + 2] - arr[i]);

            bw.write(max + "\n");
        }

        bw.flush();
    }

}