https://www.acmicpc.net/problem/10828
import java.util.*;
import java.io.*;
public class Main {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
static int[] stack;
static int top=-1;
public static void main(String[] args) throws Exception {
int n=Integer.parseInt(br.readLine());
stack=new int[10000];
for(int iter=0;iter<n;iter++) {
String str=br.readLine();
String s[]=str.split(" ");
if(s[0].equals("push")) push(Integer.parseInt(s[1]));
else if(s[0].equals("pop")) bw.write(String.valueOf(pop())+"\n");
else if(s[0].equals("size")) bw.write(String.valueOf(size())+"\n");
else if(s[0].equals("empty")) bw.write(String.valueOf(empty())+"\n");
else if(s[0].equals("top")) bw.write(String.valueOf(top())+"\n");
}
bw.flush();
bw.close();
}
static public void push(int num) {
stack[++top]=num;
}
static public int pop() {
if(top<0) return -1;
else return stack[top--];
}
static public int size() {
return top+1;
}
static public int empty() {
if(top<0) return 1;
else return 0;
}
static public int top() {
if(top<0) return -1;
return stack[top];
}
}
이 문제는 스택의 기본에 대한 문제입니다.
스택은 아래 그림을 보고 이해하시면 좋을 것 같습니다.
스택은 후입선출(LIFO: Last-In-First-out)의 구조로, 마지막에 들어간 자료가 가장 먼저 나오는 구조를 가지고 있습니다.
즉, 자료를 차곡차곡 쌓으면서 저장하는데, 이 자료를 꺼낼 때에는 위에 있는 자료부터 꺼내는 구조입니다.
이제 제가 코드에서 구현한 함수에 대해 간단히 말씀드리면, push(int num)는 매개 변수 num을 스택에 집어 넣는 함수입니다.
pop() 함수는 스택 최상단에 있는 요소를 삭제하고, 그 삭제된 요소를 리턴값으로 반환하는 함수입니다.
size()는 스택의 크기를 반환하는 함수이고, empty()는 스택이 비어있으면 1을, 그게 아니면 0을 반환하는 함수입니다.
그리고 top() 함수는 스택 최상단에 있는 요소의 값을 리턴하는 함수입니다.
스택의 구현은 top이라는 변수를 중점적으로 이루지는데요, 후입선출인 만큼 최상단에 있는 top이 어떤 값을 갖느냐를 중심으로 이뤄집니다.
'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글
[BOJ 2164번] 카드2(자바) (0) | 2020.07.31 |
---|---|
[BOJ 18258번] 큐 2(JAVA) (0) | 2020.07.31 |
[BOJ 9012번] 괄호(JAVA) (0) | 2020.07.29 |
[BOJ 1874번] 스택 수열(Java) (0) | 2020.07.24 |
[BOJ 10773번] 제로(Java) (0) | 2020.07.23 |