https://www.acmicpc.net/problem/1927
이 문제 같은 경우는 따로 설계를 안하고 풀어도 될꺼같아서 일단 먼저 풀어 보았다.
import java.io.*;
import java.util.*;
public class Main {
public static int N;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int i = 0; i < N; i++){
int cur = Integer.parseInt(br.readLine());
if(cur == 0){
if(pq.isEmpty()){
System.out.println(0);
}else{
System.out.println(pq.poll());
}
}else{
pq.offer(cur);
}
}
}
}
JAVA에 내장 자료구조인 우선순위 큐를 사용하여 쉽게 풀었는데 시간이 좀 오래 걸렸다.
시간을 최적화할 방법이 있을까 싶어 GPT 한테 물어보았다.
한가지 정도 아쉽다는 답변을 해주었는데 System.out.println 같은 경우 매번 호출하면 IO 자체가 느리므로 StringBuilder 를 사용하면 좋을꺼같다는 답변이었다.
알고 있는 내용이었지만 근래에 이렇게 많은 출력을 해주는 문제가 없어서 인식하지 못하고 있었다.
바꿔서 다시 풀어보았다.
import java.io.*;
import java.util.*;
public class Main {
public static int N;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
N = Integer.parseInt(br.readLine());
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int i = 0; i < N; i++){
int cur = Integer.parseInt(br.readLine());
if(cur == 0){
if(pq.isEmpty()){
sb.append(0).append('\n');
}else{
sb.append(pq.poll()).append('\n');
}
}else{
pq.offer(cur);
}
}
System.out.println(sb);
}
}

생각보다 시간차이가 많이 나는것을 볼 수 있다.
꼭 입출력이 많을때는 StringBuilder를 사용하자.
'코딩테스트 > JAVA' 카테고리의 다른 글
| [백준 JAVA] 1976번: 여행 가자 (0) | 2025.12.31 |
|---|---|
| [백준 JAVA] 1943번: 동전 분배 (0) | 2025.12.25 |
| [백준 JAVA] 1863번: 스카이라인 쉬운거 (1) | 2025.12.24 |
| [백준 JAVA] 1522번: 문자열 교환 (1) | 2025.12.15 |
| [백준 JAVA] 1515번: 수 이어쓰기 (0) | 2025.12.15 |