풀이
문제에 힙이라고 적혀있듯이, 우선순위 큐를 사용하는 문제이다. 그런데, 우선순위 큐의 정렬 조건이 절댓값이고, 절댓값이 같을 경우 작은 숫자를 우선으로 한다. 이를 구현하는게 이번 문제의 핵심이다…조건 걸어주는게 힘들었다.
조건을 걸어주고 나면, 문제에 쓰여있는 대로, x가 0일 때 출력하고 삭제(poll())해주고, 다른 값일 땐 큐에 입력(add())해주면 된다. 정말 우선순위 큐에 조건만 걸면 끝인 문제다!
자바의 자료형에 대해 조금 더 깊이있게 공부를 해야겠다는 생각이 든다..
소스 코드
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
import java.util.*;
public class 절댓값힙 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
PriorityQueue<Integer> q = new PriorityQueue<>((o1,o2) -> {
int first = Math.abs(o1);
int second = Math.abs(o2);
if (first == second) {
return o1 > o2 ? 1 : -1;
}
else
return first-second;
});
for (int i = 0; i < n; i++) {
int x = sc.nextInt();
if (x == 0) {
if (q.size() == 0)
System.out.println(0);
else
System.out.println(q.poll());
}
else {
q.add(x);
}
}
}
}
태클 감사합니다.
조언 환영입니다.