문제
https://www.acmicpc.net/problem/11286
11286번: 절댓값 힙
첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
풀이
힙 문제로 우선순위 큐를 이용한다.
절댓값 기준으로 정렬을 해줘야 하니, Comparator의 compare를 오버라이드 해서 정렬의 기준을 절댓값으로 만들어 주었다.
코드
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));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<>() {
@Override
public int compare(Integer o1, Integer o2) {
if(Math.abs(o1) == Math.abs(o2)) {
return o1-o2;
}
return Math.abs(o1) - Math.abs(o2);
}});
for(int i=0;i<n;i++) {
int input = Integer.parseInt(br.readLine());
if(input != 0) {
pq.add(input);
}
else {
if(pq.isEmpty())
sb.append(0);
else {
int ans = pq.poll();
sb.append(ans);
}
sb.append("\n");
}
}
System.out.print(sb);
}
}
문제
https://www.acmicpc.net/problem/11286
11286번: 절댓값 힙
첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
풀이
힙 문제로 우선순위 큐를 이용한다.
절댓값 기준으로 정렬을 해줘야 하니, Comparator의 compare를 오버라이드 해서 정렬의 기준을 절댓값으로 만들어 주었다.
코드
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)); StringBuilder sb = new StringBuilder(); int n = Integer.parseInt(br.readLine()); PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<>() { @Override public int compare(Integer o1, Integer o2) { if(Math.abs(o1) == Math.abs(o2)) { return o1-o2; } return Math.abs(o1) - Math.abs(o2); }}); for(int i=0;i<n;i++) { int input = Integer.parseInt(br.readLine()); if(input != 0) { pq.add(input); } else { if(pq.isEmpty()) sb.append(0); else { int ans = pq.poll(); sb.append(ans); } sb.append("\n"); } } System.out.print(sb); } }