🔑알고리즘/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();

	}
	


}
반응형