본문 바로가기
문제풀이

백준 11479번 통나무건너뛰기 JAVA

by AndoneKwon 2020. 11. 3.

해결 방식은 새로운 덱을 하나 만들어서 정렬시킨 배열에서 숫자가 큰 순으로 덱에다가 번갈아 가며 앞뒤로 집어넣으면 결론적으로 가장 작은 차이가 생기는 덱이 하나가 생성된다.

그 후, 덱에 들어있는 값을 배열로 옮겨 인접한 배열 요소의 차이가 가장 큰 값을 구한다.

단, 이때 그 차이는 절대값으로 해야한다.

한번에 맞춰서 기분이 좋다..

import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
import java.util.logging.FileHandler;

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;

        List<Integer> answer = new ArrayList<>();

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

        int[] list = new int[T];

        for(int i=0;i<T;i++){
            int N = Integer.parseInt(br.readLine());
            int[] log = new int[N];
            Deque<Integer> deque = new ArrayDeque<>();
            String temp = br.readLine();
            st = new StringTokenizer(temp);
            int j=0;
            while(st.hasMoreTokens()){
                log[j]=Integer.parseInt(st.nextToken());
                j++;
            }
            Arrays.sort(log);
            for(int k=N-1;k>=0;k--){
                if(k%2==0)
                    deque.addFirst(log[k]);
                else
                    deque.addLast(log[k]);
            }

            for(int k=0;k<N;k++){
                log[k]=deque.poll();
            }

            int max=-1;

            for(int k=0;k<N;k++){
                max=Math.max(Math.abs(log[k]-log[(k+1)%N]),max);
            }

            answer.add(max);
        }

        for(int i : answer){
            bw.write(Integer.toString(i));
            bw.newLine();
        }
        bw.flush();
        bw.close();
    }
}

'문제풀이' 카테고리의 다른 글

백준 15686 치킨배달 JAVA  (0) 2020.11.05
백준 18405번 경쟁적감염 JAVA  (0) 2020.11.05
백준 3273번 두수의합 JAVA  (0) 2020.10.11
백준 14888번 연산자끼워넣기 JAVA  (0) 2020.10.11
백준 2239번, 2580번 JAVA  (0) 2020.10.10