728x90
반응형
2024.08.07기준 - 실버1
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 수가 들어올 때, 0이 들어오면 들어온 수에서 가장 절대값이 낮은 수를 출력하는 문제입니다.
1. PriorityQueue를 이용하여 정렬을 저장과 동시에 처리했습니다.
음수와 양수를 따로 변수를 선언하여 저장을 했습니다. (절대값이 같은 경우 음수를 보여줘야 되기때문에)
PriorityQueue<Integer> pqu = new PriorityQueue<>(); // 양수
PriorityQueue<Integer> nqu = new PriorityQueue<>(Collections.reverseOrder()); // 음수
2. 수 가 0이 나오면 조건에 맞게 출력을 다른 수가 나온다면 음수와 양수에 맞게 저장을 해주었습니다.
int num;
while (n-- > 0) {
num = Integer.parseInt(br.readLine());
if (num == 0) { // 출력
// 양수, 음수가 다 있다면 음수에서 값을 출력.
if (!pqu.isEmpty() && !nqu.isEmpty()) {
if (Math.abs(nqu.peek()) <= pqu.peek()) {
sb.append(nqu.poll());
} else {
sb.append(pqu.poll());
}
// 양수에만 값이 있다면 출력.
} else if (!pqu.isEmpty() && nqu.isEmpty()) {
sb.append(pqu.poll());
// 음수에만 값이 있다면 출력.
} else if (pqu.isEmpty() && !nqu.isEmpty()) {
sb.append(nqu.poll());
// 둘 다 값이 없다면
} else {
sb.append(0);
}
sb.append("\n");
} else { // 큐에 저장
if (num > 0) { // 양수이면 pqu에 저장.
pqu.add(num);
} else { // 음수 이면 nqu에 저장.
nqu.add(num);
}
}
}
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
PriorityQueue<Integer> pqu = new PriorityQueue<>(); // 양수
PriorityQueue<Integer> nqu = new PriorityQueue<>(Collections.reverseOrder()); // 음수
int num;
while (n-- > 0) {
num = Integer.parseInt(br.readLine());
if (num == 0) { // 출력
// 양수, 음수가 다 있다면 음수에서 값을 출력.
if (!pqu.isEmpty() && !nqu.isEmpty()) {
if (Math.abs(nqu.peek()) <= pqu.peek()) {
sb.append(nqu.poll());
} else {
sb.append(pqu.poll());
}
// 양수에만 값이 있다면 출력.
} else if (!pqu.isEmpty() && nqu.isEmpty()) {
sb.append(pqu.poll());
// 음수에만 값이 있다면 출력.
} else if (pqu.isEmpty() && !nqu.isEmpty()) {
sb.append(nqu.poll());
// 둘 다 값이 없다면
} else {
sb.append(0);
}
sb.append("\n");
} else { // 큐에 저장
if (num > 0) { // 양수이면 pqu에 저장.
pqu.add(num);
} else { // 음수 이면 nqu에 저장.
nqu.add(num);
}
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 5430번 AC (0) | 2024.08.08 |
---|---|
BEAKJOON / 백준 - JAVA 27294번 몇개고? (0) | 2024.08.08 |
BEAKJOON / 백준 - JAVA 11279번 최대 힙 (0) | 2024.08.06 |
BEAKJOON / 백준 - JAVA 30022번 행사 준비 (0) | 2024.08.05 |
BEAKJOON / 백준 - JAVA 25186번 INFP 두람 (0) | 2024.08.05 |