728x90
320x100
https://www.acmicpc.net/problem/11286
📌 접근 방식
- PriorityQueue 사용 ! ➡️ 아직 우선순위 큐에 대해서는 낯설고 어렵다.
- 문제 조건
- x = 0 : 배열에서 절댓값이 가장 작은 값 출력 ➡️ 배열에서 해당 값 제거 (❗️ 절댓값이 같은 수가 여러 개가 있다면 음수 값을 우선 출력 및 제거)
- x =! 0 : 배열에 정수를 넣음 (자동 정렬)
✅ PASS CODE
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));
int N = Integer.parseInt(br.readLine());
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>((o1, o2) -> {
int first_abs = Math.abs(o1);
int second_abs = Math.abs(o2);
if(first_abs == second_abs) {
return o1 > o2 ? 1 : -1;
}
else{
return first_abs - second_abs;
}
});
for(int i = 0; i < N; i++){
int a = Integer.parseInt(br.readLine());
if(a == 0){
if(priorityQueue.isEmpty()){
System.out.println("0");
}
else{
System.out.println(priorityQueue.poll());
}
}
else{
priorityQueue.add(a);
}
}
}
}
📌 느낀점
처음에는 우선순위 큐에 대해 익숙하지 않았기 때문에 이 문제를 해결하는 데 꽤 .. 어렵게 느껴졌다. 하지만 우선순위 큐가 어떻게 작동하는지, 그리고 어떻게 Comparator를 사용하여 우리가 원하는 기준으로 값을 정렬할 수 있는지에 대해 이해해보려고 노력했다.
절댓값이 작은 값을 먼저 출력하고, 절댓값이 같으면 더 작은 값을 출력하는 조건을 어떻게 구현할지 if문을 통해 하나하나 생각해야하는지 고민했는데, PrioritQueue를 통해 쉽게 구현이 가능함을 알게 되었다.
그래도 아직은 조금 헷갈린 부분이 많아서 앞으로도 이런 유형의 문제를 많이 풀어볼 계획이다 🔥🔥
728x90
반응형
'Baekjoon' 카테고리의 다른 글
[JAVA][Baekjoon] 1427번 소트인사이드 (0) | 2025.01.02 |
---|---|
[JAVA][Baekjoon] 2750번 수 정렬하기 (0) | 2025.01.01 |
[JAVA][Baekjoon] 2164번 카드2 (0) | 2024.05.12 |
[JAVA][Baekjoon] 17298번 오큰수 ⭐️⭐️⭐️⭐️⭐️ (0) | 2024.05.07 |
[JAVA][Baekjoon] 1874번 스택 수열🌟 (0) | 2024.05.02 |