https://www.acmicpc.net/problem/10828
선형 자료구조를 공부하면서 풀어보기 위해 선택한 스택 문제다.
기본적인 Stack 클래스에서 활용할 수 있는 메소드들을 새롭게 리턴하여 출력될 수 있게 하면 되는 문제였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.NoSuchElementException;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
static int checkEmpty(Stack<Integer> stack) {
if (stack.isEmpty()) {
return 1;
}
return 0;
}
static int checkTop(Stack<Integer> stack) {
if (stack.isEmpty()) {
return -1;
}
return stack.peek();
}
static int checkPop(Stack<Integer> stack) {
if (stack.isEmpty()) {
return -1;
}
return stack.remove(stack.size() - 1);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Integer> stack = new Stack<>();
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
StringTokenizer cmd = new StringTokenizer(br.readLine(), " ");
switch (cmd.nextToken()) {
case "push":
stack.add(Integer.parseInt(cmd.nextToken()));
break;
case "pop":
System.out.println(checkPop(stack));
break;
case "size":
System.out.println(stack.size());
break;
case "empty":
System.out.println(checkEmpty(stack));
break;
case "top":
System.out.println(checkTop(stack));
break;
}
}
br.close();
}
}
이 문제의 시간제한은 0.5초이다.
처음에는 Scanner를 활용하여 풀었지만 시간 초과로 정답이 아니였고
시간을 단축시키기 위해서 BufferedReader를 활용하였다.
그리고 개행입력에 따라 구분할 수 있도록 StringTokenizer를 활용했고
default기준으로는 공백을 따라 토큰이 나뉘기 때문에 띄어쓰기를 기준으로 각 토큰을
switch-case문으로 새로 만든 메소드들을 실행하여 출력하도록 구현했다.
BufferedReader는 입력을 String타입으로 읽어오기 때문에 숫자의 경우 parsing을 해줘야했다.
main 뒤에 throws IOException도 필요하다.