Seren dev's blog
article thumbnail

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

 

11286번: 절댓값 힙

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

www.acmicpc.net

 

풀이

PriorityQueue를 사용하여 풀었다.

PriorityQueue를 선언할 때 조건에 맞는 Comparator 생성자를 사용하여 선언하면 된다.

코드

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    	
    	PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
    		@Override
    		public int compare(Integer a, Integer b) {
    			if (Math.abs(a) == Math.abs(b)) {
    				return a - b;
    			}
    			return Math.abs(a) - Math.abs(b);
    		}
    	});
    	
    	int t = Integer.parseInt(br.readLine());
    	while (t-- > 0) {
    		int num = Integer.parseInt(br.readLine());
    		if (num != 0) {
    			pq.add(num);
    		} else {
    			if (pq.isEmpty()) {
    				bw.write(0 + "\n");
    			} else {
    				bw.write(pq.poll() + "\n");
    			}
    		}
    	}
    	
    	bw.flush();
    	br.close();
    	bw.close();
    }
}

 

728x90
profile

Seren dev's blog

@Seren dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!