import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer;
int order_num = Integer.parseInt(br.readLine()); // String을 int로 형변환
Stack<Integer> st = new Stack<Integer>();
for(int i = 0 ; i < order_num; i++) {
stringTokenizer = new StringTokenizer(br.readLine());
String order = stringTokenizer.nextToken();
switch(order) {
case "push":
int input = Integer.parseInt(stringTokenizer.nextToken());
st.push(input);
break;
case "pop":
System.out.println(st.isEmpty()?-1:st.pop());
break;
case "size":
System.out.println(st.size());
break;
case "empty":
System.out.println(st.isEmpty()?1:0);
break;
case "top":
System.out.println(st.isEmpty()?-1:st.peek());
break;
}
}
}
}
처음 문제를 풀고 제출했을 때, 시간 초과라는 결과를 3번이나 받았다. 평소 Scanner로 입력을 받는 방법을 선호해서 사용했는데 계속되는 시간 초과로 BufferedReader로 입력을 받는 방법으로 바꿨더니 맞았다는 결과를 얻었다.
우선 BufferedReader를 사용하기 위해 메인 함수에 IOException으로 예외처리를 했다.
StringTokenizer는 입력받은 값을 기본 구분자로 쪼개서 order로 보내주기 위해 사용했다.
Stack클래스의 메서드를 사용하기 위해 객체로 만들었다.
for문에서는 order에 입력받은 값을 공백으로 쪼개서 push 2 일 경우 push와 2 사이 공백을 기준으로 2를 형 변환해서 input에 넣어주고 스택에 2를 넣어준다.
그리고 나머지 pop과 empty, top는 삼항 연산자를 사용했고 size는 Stack클래스의 메서드를 사용했다.
'문제풀이 > 백준' 카테고리의 다른 글
백준 1927. 최소 힙(JAVA) (0) | 2022.03.13 |
---|---|
백준 10773. 제로(JAVA) (1) | 2022.03.11 |
백준 8958. OX퀴즈(JAVA) (0) | 2022.03.08 |
백준 11399. ATM(JAVA) (0) | 2022.03.07 |
백준 2839. 설탕 배달(JAVA) (0) | 2022.03.07 |