https://www.acmicpc.net/problem/11497
11497번: 통나무 건너뛰기
남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이
www.acmicpc.net
문제
풀이
두 통나무 차이를 최소로 했을 때의 , 차이의 최대값을 구하면되는 문제이다.
난이도 차이가 크게 나지 않게하려면 우선 내림차순으로 정렬을 한 다음 양쪽으로 하나씩 넣어주면 된다.
양쪽으로 교차로 넣어줘야 하기때문에 Deque를 써서 addFirst와 addLast 메서드를 이용했다.
넣기전에 원래 있던 값과 새로 들어가야할 값 두개의 차이값이 최대값이면 갱신을 해주는식으로 하고
마지막에 다 채웠을 때 , 양쪽 끝 값을 비교하면 끝.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import java.util.*;
import java.io.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tc = Integer.parseInt(br.readLine());
while(tc-->0){
int n = Integer.parseInt(br.readLine());
List<Integer> list = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());
ArrayDeque<Integer> dq = new ArrayDeque<>();
list.sort(Collections.reverseOrder());
dq.add(list.get(0));
int max = 0;
int index=1;
while(dq.size()<n){
int nextFront = list.get(index++);
max = Math.max(max,dq.getFirst()-nextFront);
dq.addFirst(nextFront);
if(index<n) {
int nextLast = list.get(index++);
max = Math.max(max,dq.getLast()-nextLast);
dq.addLast(nextLast);
}
}
max = Math.max(max,Math.abs(dq.getLast()-dq.getFirst()));
System.out.println(max);
}
}
}
|
cs |
'알고리즘,PS > 백준' 카테고리의 다른 글
[BOJ] 백준 [11400] 단절선 JAVA (0) | 2021.10.31 |
---|---|
[BOJ] 백준 [11266] 단절점 JAVA (0) | 2021.10.31 |
[BOJ] 백준 [13904] 과제JAVA (0) | 2021.10.29 |
[BOJ] 백준 [1092] 배JAVA (0) | 2021.10.28 |
[BOJ] 백준 [9576] 책 나눠주기JAVA (0) | 2021.10.28 |