https://www.acmicpc.net/problem/11286
- 절댓값이 가장 작은수대로 우선순위큐에 저장한다.
- 값이 0이 아니면 큐에 넣어준다.
- 값이 0이면
- 큐가 비어있으면 0출력
- 큐 맨앞 수가 0이하이면 그대로 출력
- 가장 작은 절대값을 가진 수가 양수면 여러개일때를 고려해야하니 list에 모두 담아 그중 작은수를 출력하고 다시 우선순위큐에 넣는다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
PriorityQueue<Integer> pq = new PriorityQueue<>((o1, o2) -> Math.abs(o1) - Math.abs(o2));
//절대값 기준으로 오름차순 정렬
for (int i = 0; i < N; i++) {
int num = Integer.parseInt(br.readLine());
if (num != 0) { // 숫자가 0이 아니면 pq 에 더해준다.
pq.offer(num);
} else { // 숫자가 0이면 절댓값이 가장작은 수를, 여러개면 음수값을 갖는 수를 빼주는 식
if (pq.isEmpty()) { // 비어있으면 0 출력
sb.append(0).append("\n");
continue;
}
if (pq.peek() <= 0) { // 0 이하이면 그대로 출력
sb.append(pq.poll()).append("\n");
continue;
}
// 0 보다 크면 같은 절댓값을 가진 수들을 list에 모은다.
List<Integer> list = new ArrayList<>();
int min = pq.peek();
while (!pq.isEmpty() && Math.abs(pq.peek()) == min) {
list.add(pq.poll());
}
//list 수들을 오름차순 정렬
Collections.sort(list);
sb.append(list.get(0)).append("\n"); // 가장 작은수 출력
//list에 남아있는 수 다시 pq에 저장
for (int j = 1; j < list.size(); j++) {
pq.offer(list.get(j));
}
}
}
System.out.print(sb);
br.close();
}
}
728x90
'알고리즘 > Java 알고리즘' 카테고리의 다른 글
[백준] 16166 번 : 서울의 지하철 - JAVA 풀이 (1) | 2025.04.15 |
---|---|
[백준] 7511 번 : 소셜 네트워킹 어플리케이션 - JAVA 풀이 (1) | 2025.04.14 |
[백준] 7983 번 : 내일 할거야 - JAVA 풀이 (1) | 2025.04.11 |
[IT기사] LG CNS, 국내 최초 SAP 아시아태평양지역 전략 서비스 파트너 이니셔티브 합류 (2025/02/06) (2) | 2025.04.11 |
[백준] 14890 번 : 경사로 - JAVA 풀이 (1) | 2025.04.09 |