데이터 엔지니어링 정복/Algorithm

[우선순위큐] 백준 - 최대힙(11279)

eeaarrtthh 2022. 6. 20. 21:05
728x90
반응형

-문제

https://www.acmicpc.net/problem/11279

 

11279번: 최대 힙

첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가

www.acmicpc.net

 

 

-자바 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.PriorityQueue;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt( br.readLine() );
		
		//우선순위큐를 만든다. 
		//기본은 오름차순이기 때문에 큐원소들을 내림차순으로 만들어준다.
		PriorityQueue<Integer> q = new PriorityQueue<Integer>(Collections.reverseOrder());
		
		//출력시 스트링버퍼를 이용해서 메모리 사용을 줄인다.
		StringBuffer sb = new StringBuffer();
		
		//N개만큼 반복
		for( int i=0; i<N; i++ ) {
			int num = Integer.parseInt( br.readLine() );
			
			//입력받은 값이 0이면 가장 큰 수를 출력하고 제거해야 한다.
			//따라서 poll()을 통해 이를 구현하고
			//큐 사이즈가 0이면 0을 출력해준다.
			if( num == 0 ) {
				sb.append( q.size() == 0 ? 0 : q.poll() ).append('\n');
				
			} else {
				q.add( num );
			}
		}
		
		//최종적으로 스트링버퍼에 있는 문자열들 출력
		System.out.println( sb.toString() );
	}

}
728x90
반응형