✔ 난이도 - Silver 4

스택에 대해 알고 있다면 바로 풀 수 있는 문제
https://velog.io/@seha01130/JAVA-스택Stack-정리
출력할때마다 .append("\n")를 붙여주면 마지막까지 개행문자가 들어가게된다. 백준플랫폼에서는 출력 전체를 문자열로 보고 마지막 개행문자는 무시하기때문에 정답으로 인정해주지만 다른 플랫폼은 더욱 엄격하게 조건을 걸 수도 있다. 따라서 switch문을 빠져나온 이후 push가 아닌 조건이면서 맨 마지막 입력이 아닐때만 개행문자를 붙여주도록 했다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
int N = Integer.parseInt(br.readLine());
String type;
int num = 0;
for (int i = 0; i < N; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
type = st.nextToken();
if (st.hasMoreTokens()){
num = Integer.parseInt(st.nextToken());
}
switch(type){
case "push":
stack.push(num);
break;
case "pop":
if (stack.isEmpty()){
sb.append(-1);
} else {
sb.append(stack.pop());
}
break;
case "size":
sb.append(stack.size());
break;
case "empty":
if (stack.isEmpty()){
sb.append(1);
} else {
sb.append(0);
}
break;
case "top":
if (stack.isEmpty()){
sb.append(-1);
} else {
sb.append(stack.peek());
}
break;
default:
break;
}
if (!type.equals("push") && i < N - 1){
sb.append("\n");
}
}
System.out.println(sb);
}
}
📌 자바에서 문자열 비교는 == 또는 != 비교를 쓰면 문자열 자체를 비교하는 것이 아닌, 참조(메모리 주소)를 비교한다. 따라서 !type.equals("push") 이런 식으로 비교해줘야함! 너무 기초적인건데 실수를 했다. 충격,,, 뭐든 꼼꼼히 보고 생각하자!

