https://www.acmicpc.net/problem/28278

이번 문제도 실버4 문제이고, 스택의 기본 연산을 알고 있다면 쉽게 풀 수 있다.
1. 명령어의 수 N을 입력받고
2. 주어진 문제의 명령을 구현한 후 출력하면 끝
물론 코드를 어떻게 구성하느냐에 따라 속도 차이는 있을 수 있다.
package Baekjoon;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class _28278_1 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine()); // 명령어의 수
Stack<Integer> stack = new Stack<>();
StringTokenizer st;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
switch (st.nextToken()) {
case "1": stack.push(Integer.parseInt(st.nextToken())); break;
case "2":
if (stack.isEmpty()) sb.append(-1).append("\n");
else sb.append(stack.pop()).append("\n");
break;
case "3": sb.append(stack.size()).append("\n"); break;
case "4":
if (stack.isEmpty()) sb.append(1).append("\n");
else sb.append(0).append("\n");
break;
case "5":
if (stack.isEmpty()) sb.append(-1).append("\n");
else sb.append(stack.peek()).append("\n");
break;
default: break;
}
}
System.out.println(sb);
}
}
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
switch (st.nextToken()) {
case "1" : stack.push(Integer.parseInt(st.nextToken())); break;
case "2" : sb.append(stack.isEmpty() ? -1 : stack.pop()).append("\n"); break;
case "3" : sb.append(stack.size()).append("\n"); break;
case "4" : sb.append(stack.isEmpty() ? 1 : 0).append("\n"); break;
case "5" : sb.append(stack.isEmpty() ? -1 : stack.peek()).append("\n"); break;
default: break;
}
}
package Baekjoon;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
public class _28278_4 {
static StringBuilder sb = new StringBuilder();
static Stack<Integer> stack = new Stack<>();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 명령어의 수
while(N-- > 0){
solution(br.readLine());
}
br.close();
System.out.println(sb);
}
static void solution(String input){
char c = input.charAt(0);
switch (c){
//case 1의 경우 query.substring(2);를 한 이유는 공백도 문자로 포함하기 때문이다 1 X 형태이기 때문에 X의인덱스는 2다.
case '1' : stack.push(Integer.parseInt(input.substring(2))); return;
case '2' : sb.append(stack.isEmpty() ? -1 : stack.pop()).append("\n"); return;
case '3' : sb.append(stack.size()).append("\n"); return;
case '4' : sb.append(stack.isEmpty() ? 1 : 0).append("\n"); return;
case '5' : sb.append(stack.isEmpty() ? -1 : stack.peek()).append("\n"); return;
default: break;
}
}
}

위에서 부터 순서대로
채점 번호 : 69580722 - 방법 3 - StringTokenizer 사용 x
채점 번호 : 69580392 - 방법 2 - 조건문 -> 삼항연산자
채점 번호 : 69579891 - 방법 1 - BufferedReader, StringBuilder, StringTokenizer, Stack + 메소드의 이용
진짜 조그마한 차이지만 속도 차이가 난다는게 신기할 따름이다. 아무래도 속도 자체는 컴퓨터를 위한 코드가 가장 빠르건가 싶다.