Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 10813 자바
- 자바 28278
- 자바 10866
- 자바 2346
- 10807 자바
- 28278 스택 2
- 데보션영 3기
- 백준 10866 자바
- 백준
- dfs
- 백준 2346 자바
- 1764 자바
- 10810 자바
- 2748 자바
- 2164 자바
- 그리디
- 자바 1003
- 파이썬
- 자바 2164
- 백준 28278 자바
- 백준 1764 자바
- 코딩테스트
- 2798 자바
- IAM 사용자
- BFS
- 2346 풍선 터뜨리기
- 티움투어
- 자바
- 1010 자바
- IAM Identity Center
Archives
- Today
- Total
자두의 데브로그
[자바] 백준 11286번 절댓값 힙 본문
https://www.acmicpc.net/problem/11286
이 문제. 정말,. 이제야 우선순위큐를 이해한 사람에게 너무 많은 걸 요구하는 문제라고 생각이 되지만... 어쨋든 우선순위의 기준을 커스텀 해야된다는 거 알고 이것저것 만져봤다는 거에서 그나마 위안을 얻는다^^
이 풀이를 작성하면서 가장 이해 안됐던 것이 compare 내부에서 어떤 식으로 구현해야되는지 였는데 다시 생각해보니 원래 PriorityQueue의 순서는 숫자가 작은 것부터 큰 순서대로 출력하니까, 디폴트가 이 설정이라고 생각하고, 절댓값이 같은 경우에 대해서는 음수가 저장되게 하고(즉 원래의 값 비교), 다른 경우에는 절댓값이 작은 게 먼저 오도록 하는 설정을 하면 된다. 이해 안되면 그냥 compare 함수를 통으로 외워버리기~
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
PriorityQueue<Integer> pr = 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 n = Integer.parseInt(br.readLine());
for(int i = 0; i < n; i++){
int x = Integer.parseInt(br.readLine());
if(x != 0) pr.add(x);
else{
if(pr.isEmpty()) sb.append(0);
else sb.append(pr.poll());
sb.append("\n");
}
}
System.out.println(String.valueOf(sb));
}
}
쉽지 않네...
'코딩테스트 > Java' 카테고리의 다른 글
[자바] 백준 7562번 나이트의 이동 (0) | 2024.10.15 |
---|---|
[자바] char to int 변환하는 방법 (0) | 2024.10.12 |
[자바] 백준 11279번 최대 힙 (0) | 2024.10.09 |
[자바] 프로그래머스 폰켓몬 (1) | 2024.10.09 |
[자바] 프로그래머스 완주하지 못한 선수 (3) | 2024.10.09 |