Home 백준 11286번(절댓값 힙)[JAVA]
Post
Cancel

백준 11286번(절댓값 힙)[JAVA]

절댓값힙
절댓값힙2

풀이

문제에 힙이라고 적혀있듯이, 우선순위 큐를 사용하는 문제이다. 그런데, 우선순위 큐의 정렬 조건이 절댓값이고, 절댓값이 같을 경우 작은 숫자를 우선으로 한다. 이를 구현하는게 이번 문제의 핵심이다…조건 걸어주는게 힘들었다.
조건을 걸어주고 나면, 문제에 쓰여있는 대로, 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);
			}
		}
	}
}

태클 감사합니다.
조언 환영입니다.

This post is licensed under CC BY 4.0 by the author.

백준 11003번(최솟값 찾기)[JAVA]

백준 1253번(좋다)[JAVA]