sm 기술 블로그

182. 11279(최대 힙) - 자바 본문

문제/백준_자바

182. 11279(최대 힙) - 자바

sm_hope 2022. 8. 21. 15:56
import java.util.*;
import java.io.*;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		int N = sc.nextInt();
		PriorityQueue<Integer> que = new PriorityQueue<>();

		for (int i = 0; i < N; i++) {
			int X = sc.nextInt();
			
			if(X==0) {
				if(que.isEmpty()) {
					sb.append(0).append("\n");
				}
				else {
					sb.append(-que.remove()).append("\n");
				}
			}
			else {
				que.add(-X);
			}
		}
		System.out.print(sb);
	}
}

문제요약

값을 입력하는데 0이면 현재 입력된 값 중에 가장 큰 값을 출력하라.(내림차순 필요)

설명

우선순위 큐를 이용한다.

유선순위 큐에 대해서는 다음을 참고하자.

https://smhope.tistory.com/485?category=1056187 

 

[자료구조 || 알고리즘] 우선순위 큐

우선순위 큐 큐(Queue)는 먼저 들어오는 데이터가 먼저 나가는 FIFO(First In First Out) 형식의 자료구조이다. 우선순위 큐(Priority Queue)는 먼저 들어오는 데이터가 아니라, 우선순위가 높은 데이터가 먼

smhope.tistory.com

기본적으로 우선순위 큐는 오름차순으로 진행된다.

하지만 우리는 내림차순이 필요하다 따라서 큐에 값을 집어 넣기 전에, -를 붙여 넣어주자.

 

그러면 비록 - 형태이지만 절대값 기준으로는 내림차순으로 정렬된다.

 

출력을 해줄 때 다시 -를 붙여줌으로써 간단히 해결 가능하다.

Comments