-
스택에 대해 알아보자Knowledge/Data Structure 2019. 9. 4. 22:25반응형
- 스택이란?
한쪽 끝 ( 가장 위 - Top )에서만 자료를 넣고 뺄 수 있는 자료구조.
마지막으로 넣은 것이 가장 먼저 나오기 때문에 LIFO ( Last In First Out ) 라고도 한다.
- 주로 사용하는 메소드
push: 스택에 자료를 넣는 연산
pop : 스택에서 자료를 빼는 연산
peek: 스택의 가장 위에 있는 자료를 보는 연산
empty: 스택이 비어있는지 아닌지를 알아보는 연산
size: 스택에 저장되어있는 자료의 개수를 알아보는 연산- 구현
정확한 구현이 아닌
백준 10828번 스택 문제 ( https://www.acmicpc.net/problem/10828 ) 의 조건
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
에 맞게 구현한 것임을 미리 알립니다
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;public class Main {ArrayList<Integer> stack = new ArrayList<>();void push(int x) {stack.add(x);}void pop() {if (stack.size() == 0) {System.out.println(-1);} else {this.top();stack.remove(stack.size() - 1);}}void size() {System.out.println(stack.size());}void empty() {if (stack.size() == 0) {System.out.println(1);} else {System.out.println(0);}}void top() {if (stack.size() == 0) {System.out.println(-1);} else {System.out.println(stack.get(stack.size() - 1));}}public static void main(String[] args) {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String s = "";Main stack = new Main();try {s = br.readLine();} catch (IOException e) {e.printStackTrace();}int count = Integer.parseInt(s);for (int i = 0; i < count; i++) {try {s = br.readLine();if (s.startsWith("push")) {String[] push = s.split(" ");stack.push(Integer.parseInt(push[1]));} else {if (s.equals("top")) {stack.top();} else if (s.equals("size")) {stack.size();} else if (s.equals("pop")) {stack.pop();} else if (s.equals("empty")) {stack.empty();}}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}- 라이브러리 활용
굳이 이렇게 직접 구현하지 않아도 된다.
한두번은 이 자료구조를 이해하기 위해 구현해도 좋겠으나
java.util 패키지안에 이미 잘 구현된 Stack이 존재하니
실제로 알고리즘 문제를 풀때는 그걸 불러서 사용하자!
반응형'Knowledge > Data Structure' 카테고리의 다른 글
덱에 대해 알아보자 (0) 2019.10.18 큐에 대해 알아보자 (0) 2019.09.05 시간복잡도를 표현하자! Big O 표기법 (0) 2019.09.04