https://www.acmicpc.net/problem/11286
[풀이]
- 우선순위 큐를 이용한 자료구조 유형의 문제입니다.
- 처음에는 음수, 양수를 구별한 두개의 우선순위 큐를 선언해서 절댓값을 비교하여 출력하려 했습니다.
- 하지만, 좀 더 효율적인 방법은 우선순위 큐를 선언할 때, 정렬에 대한 정의를 재정의 하면 됩니다.
- 이처럼, 우선순위큐의 정렬을 재정의하여 선언하면 절댓값 값이 같을 때, 다를 때 모두 대처를 할 수 있습니다.
[코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
Queue<Integer> queue = new PriorityQueue<>(((o1, o2) ->
Math.abs(o1) == Math.abs(o2) ? Integer.compare(o1,o2) : Integer.compare(Math.abs(o1),Math.abs(o2))
));
for(int i = 0; i< n; i++) {
int num = Integer.parseInt(br.readLine());
if (num == 0) {
sb.append(queue.size() == 0 ? 0 : queue.poll()).append("\n");
} else {
queue.offer(num);
}
}
System.out.println(sb.toString());
}
}
'Algorithm > 백준' 카테고리의 다른 글
백준 9461번 : 파도반 수열(Java) (0) | 2022.01.05 |
---|---|
백준 1074번 : Z(Java) (0) | 2022.01.02 |
백준 2493번 : 탑(Java) (0) | 2021.11.22 |
백준 1748번 : 수 이어 쓰기1(Java) (0) | 2021.11.20 |
백준 20291번 : 파일 정리(Java) (0) | 2021.11.19 |