https://st-lab.tistory.com/142?category=856997
알기 쉽게 설명해준 출처를 참고했으므로 남긴다.
스택에 대한 개념을 알 수 있다.
이 문제에서는
push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
이 5가지의 명령어를 N개만큼 입력받으면 명령어에 해당하는 값을 출력해야한다.
값이 stackunderflow나 stackoverflow인 경우에는 -1을 출력하도록 예외를 처리한다.
아래의 코드에서는 문자열을 입력받아 출력하기위해서 switch case문을 사용했다.
출처 : Stranger's lab
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class java_io {
public static int[] stack;
public static int size = 0;
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
stack = new int[N];
while(N-->0) {
st = new StringTokenizer(br.readLine()," ");
switch(st.nextToken()) {
case "push":
push(Integer.parseInt(st.nextToken()));
break;
case "pop":
sb.append(pop()).append('\n');
break;
case "size":
sb.append(size()).append('\n');
break;
case "empty":
sb.append(empty()).append('\n');
break;
case "top":
sb.append(top()).append('\n');
break;
}
}
System.out.println(sb);
}
//배열에 값을 추가한다.
public static void push(int item) {
stack[size] = item;
size++;
}
//res를 top이라고 하면, top을 0으로 지우고, 값인 res를 출력
public static int pop() {
if(size ==0) {
return -1;
}
else {
int res = stack[size -1];
stack[size-1] =0;
size--;
return res;
}
}
//배열의 index의 크기 그자체가 size
public static int size() {
return size;
}
//size가 0이면 true인 1을 return 아니면 false인 0
public static int empty() {
if(size == 0) {
return 1;
}
else {
return 0;
}
}
//맨 윗값을 출력하므로 배열의 수 -1 는 index가 된다.
public static int top() {
if(size ==0) {
return -1;
}
else {
return stack[size-1];
}
}
}