문제 url:
스택 2
문제:
제목부터가 스택을 사용하라는 문제이다.
문제 자체는 어렵지 않다. 주어진 명령에 따라 출력을 하면 되기 때문이다.
즉 이번 문제는 스택을 사용해서 나타낼 수 있는가 없는가를 판단하는 문제이기 때문에
문제를 알아보기 보단 stack에 대해 알아보고 가자
다행히, 이번에 해당 카테고리를 공부하면서 정리한 것이 있다. 아래 링크를 통해 stack에 대해 정리한 것을 간략히 읽어보면 좋을 것 같다.
[Java] 스택(stack) 클래스 정리 & 사용법
import java.io.*;
import java.util.ArrayList;
import java.util.List;
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));
StringBuilder sbd = new StringBuilder();
int N = Integer.parseInt(br.readLine());
List<Integer> stack = new ArrayList<>();
for(int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int order = Integer.parseInt(st.nextToken());
if(order == 1 && st.hasMoreTokens()) {
stack.add(Integer.parseInt(st.nextToken()));
continue;
}
switch(order) {
case 2:
if(!stack.isEmpty()) {
sbd.append(stack.get(stack.size()-1)).append("\n");
stack.remove(stack.size()-1);
} else {
sbd.append(-1).append("\n");
}
break;
case 3:
sbd.append(stack.size()).append("\n");
break;
case 4:
if(stack.isEmpty()) {
sbd.append(1).append("\n");
} else {
sbd.append(0).append("\n");
}
break;
case 5:
if(!stack.isEmpty()) {
sbd.append(stack.get(stack.size()-1)).append("\n");
} else {
sbd.append(-1).append("\n");
}
break;
}
}
System.out.println(sbd);
}
}
스택에 대한 문제인데, 왜 스택을 사용하지 않았나요??
이번에는 스택과 달리 스택형태로 사용하는 ArrayList를 구현해보았다.
물론 ArrayList가 LIFO 자료구조를 가지진 않았지만, stack에 대한 구조를 좀 더 이해 해보고자 이렇게 풀어보았다.