forDevLife
[백준] 11286 - 절댓값 힙 본문
정렬을 위해 class를 정의해서 사용하였으나 굳이 이렇게 할 필요 없이 compare 단계에서 해도 괜찮을 듯 하다.
어쨌든 priorityQueue에 comparator를 이용해서 우선순위 조정이 가능하다는 것이 주 해결 방법이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
class Value {
int real;
int abs;
public Value(int real, int abs) {
this.real = real;
this.abs = abs;
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer sb = new StringBuffer();
int N = Integer.parseInt(br.readLine());
PriorityQueue<Value> pq = new PriorityQueue<>(new Comparator<Value>() {
@Override
public int compare(Value o1, Value o2) {
if(o1.abs == o2.abs) {
return o1.real - o2.real;
} else
return o1.abs - o2.abs;
}
});
while(N-- > 0) {
int tmp = Integer.parseInt(br.readLine());
if(!pq.isEmpty()) {
if (tmp == 0) {
sb.append(pq.poll().real).append("\n");
} else
pq.offer(new Value(tmp, Math.abs(tmp)));
} else {
if (tmp == 0) {
sb.append(0).append("\n");
} else
pq.offer(new Value(tmp, Math.abs(tmp)));
}
}
System.out.println(sb);
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] 기능개발 (0) | 2021.07.08 |
---|---|
[프로그래머스] 오픈채팅방 (0) | 2021.07.07 |
[백준] 1946 - 신입 사원 (0) | 2021.06.29 |
[백준] 1389 - 케빈 베이컨의 6단계 법칙 (0) | 2021.06.29 |
[백준] 1003 - 피보나치 함수 (0) | 2021.06.18 |
Comments