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

 

1. 풀이

PriorityQueue를 사용하여 풀었다.

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

2. 코드

<java />
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

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