해결 방식은 새로운 덱을 하나 만들어서 정렬시킨 배열에서 숫자가 큰 순으로 덱에다가 번갈아 가며 앞뒤로 집어넣으면 결론적으로 가장 작은 차이가 생기는 덱이 하나가 생성된다.
그 후, 덱에 들어있는 값을 배열로 옮겨 인접한 배열 요소의 차이가 가장 큰 값을 구한다.
단, 이때 그 차이는 절대값으로 해야한다.
한번에 맞춰서 기분이 좋다..
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 |