ㆍ문제
ㆍ통과 못한 나의 코드
import java.io.*;
import java.util.Stack;
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));
int seq = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
int[] arr = new int[seq];
int count = 0;
int idx = 0;
for(int i = 0; i < seq; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
while (count < seq && idx <= seq) {
if (!stack.isEmpty() && arr[count] == stack.peek()) {
stack.pop();
bw.write("-");
bw.newLine();
count++;
} else {
stack.push(idx + 1);
idx++;
bw.write("+");
bw.newLine();
}
}
if (stack.isEmpty()) {
bw.flush();
bw.close();
} else {
System.out.println("NO");
}
}
}
ㆍ결과
ㆍ내가 생각하는 통과가 안된 이유
출력초과! 즉, 출력쪽 문제가 된다는 소리다.
구글링을 통해 얻은 정보로는 출력이 넘쳐서 출력이 되면 출력초과라는 Fail메세지를 띄운다고 한다.
아마 BufferedWriter가 일정량을 넘어가면 자동으로 flush()를 해줘서 문제가 되는 것 같아서 StringBuffer로 변경해 보았다.
ㆍ수정 후 코드
import java.io.*;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer sb = new StringBuffer();
int seq = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
int[] arr = new int[seq];
int count = 0;
int idx = 0;
for(int i = 0; i < seq; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
while (count < seq && idx <= seq) {
if (!stack.isEmpty() && arr[count] == stack.peek()) {
stack.pop();
sb.append("-\n");
count++;
} else {
stack.push(idx + 1);
idx++;
sb.append("+\n");
}
}
if (stack.isEmpty()) {
System.out.println(sb);
} else {
System.out.println("NO");
}
}
}
ㆍ느낀 점
쉬운 문제여서 빠르게 끝낼 것이라고 생각했는데, 예상치 못한 문제로 오래걸린 문제였다.
내가 무의식적으로 사용하던 것들이 문제가 될 수 있다는 생각을 하게되었다.
앞으로는 좀 더 이해하고 사용해야 될 것 같다.
'Algorithms > 문제' 카테고리의 다른 글
[코딩테스트] 이진 검색 트리 (0) | 2024.02.01 |
---|---|
[코딩테스트] 트리의 부모 찾기 (0) | 2024.01.31 |
[코딩테스트] 더 맵게 (3) | 2024.01.29 |
[코딩테스트] 이중우선순위큐 (1) | 2024.01.25 |