🔑알고리즘/baekjoon
백준 10828 : 스택 자바 문제 풀이(시간 초과 해결-BufferedReader의 사용)
pkyung
2022. 1. 2. 22:14
반응형
사실 문제 자체는 어렵지 않았습니다.
Stack을 사용하면 되기 때문이죠.
근데 시간초과로 계속 통과가 되지 않더라고요.
많이 검색하던 중 Scanner의 사용이 아닌 BufferedReader, BufferedWirter를 사용하면 통과가 됩니다.
BufferedReader는 readLine()으로 받아서 BufferedWriter에 write()를 하여 flush() 하면 한 번에 출력이 됩니다.
따라서 System.out.priuntln() 처럼 출력을 위해서는 "\n"을 해야합니다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
Stack<Integer> st = new Stack<Integer>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
for(int i=0;i<n;i++) {
String[] s = br.readLine().split(" ");
if(s[0].equals("push")) {
st.push(Integer.parseInt(s[1]));
}
else if(s[0].equals("pop")) {
if(st.empty()) {
bw.write(-1+"\n");
}
else {
bw.write(st.pop()+"\n");
}
}
else if(s[0].equals("size")) {
bw.write(st.size()+"\n");
}
else if(s[0].equals("empty")) {
if(st.empty()) {
bw.write(1+"\n");
}
else {
bw.write(0+"\n");
}
}
else if(s[0].equals("top")) {
if(st.empty()) {
bw.write(-1+"\n");
}
else {
bw.write(st.peek()+"\n");
}
}
}
bw.flush();
}
}
반응형