SSONG Cloud

[백준] 1927 최소 힙 본문

Algorithm/백준

[백준] 1927 최소 힙

SSONGMI 2021. 3. 10. 22:44
반응형

문제 출처: www.acmicpc.net/problem/1927

 

1927번: 최소 힙

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

www.acmicpc.net

: 배열에 자연수 x를 넣고 배열에서 가장 작은 값을 출력하고 그 값을 배열에서 제거한다.

: 비어있는 배열에서 출발하여 자연수가 주어지면 그 값을 넣고 0이 주어지면 현재 배열 상태에서 가장 작은 수를 출력하고 배열에서 그 수를 삭제할 수 있도록한다.

: 정렬이 자동으로 될 수 있도록 PriorityQueue를 사용하여 구현한다.

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

public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static StringBuilder sb = new StringBuilder();
	static StringTokenizer st;
	public static void main(String[] args) throws NumberFormatException, IOException {
		// 숫자의 개수를 받고
		int N = Integer.parseInt(br.readLine());
		PriorityQueue<Integer> q = new PriorityQueue<>();
		
		// 주어진 개수만큼 숫자를 받으면서
		for(int i = 0; i < N; i++) {
			int value = Integer.parseInt(br.readLine());
			
			// 그 숫자가 0이면 큐의 첫번째 숫자를 출력에 넣어주고
			if(value == 0) {
				 if(q.size() == 0) {
					 // 큐에 들어있는게 없으면 0을 출력으로 넣어주고
					 sb.append("0\n");
				 }else {
					 sb.append(q.poll()+"\n");
				 }
			}else {
				// 0이 아니면 큐에 숫자를 넣어줌			
				q.add(value);
			}
		}
		System.out.println(sb);
	}
}
반응형
Comments