-
[Java] Stack 스택 구현/ Stack class 사용법아가개발자/자료구조,알고리즘 2021. 7. 28. 14:36
자료구조를 배울 때 가장 처음 배우게 되는 "Stack"에 대해 알아보고 직접 구현, 그리고 제공되는 클래스를 통해 스택을 사용하는 방법을 알아보도록 하겠습니다.
스택(Stack)
스택(Stack) 자료구조의 하나로 한 쪽 끝에서만 자료를 삽입/삭제가 가능한 "LIFO(Last In First Out )" 구조입니다.
따라서, 스택은 접근하기에 제한적이라는 단점이 존재합니다.
연산의 종류
- Push: 스택에 자료를 넣는 연산
- Pop: 스택에서 자료를 빼는 연산 (가장 나중에 들어왔던 자료가 삭제 됨)
- Top: 스택의 가장 위에 있는 자료를 반환하는 연산 (가장 나중에 들어온 자료)
- Empty: 스택이 비어있는지 확인하는 연산
- Size: 스택에 저장된 자료의 개수를 반환하는 연산
스택 직접 구현 (JAVA)
- Main class에 스택과 size 선언
public static int[] stack = null; public static int size=0;
- Stack에 사용될 함수 구현
public static int empty(){ if(size == 0){return 1;} else {return 0;} } public static void push(int X){ stack[size] = X; size++; } public static int pop(){ if(empty()==1){return -1;} else { size--; return stack[size]; } } public static int top(){ if(empty() ==1){return -1;} else{ return stack[size-1]; } }
- 스택 사용 (Main)
public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int N = Integer.parseInt(br.readLine()); stack = new int[N]; while (N-- >0){ StringTokenizer st = new StringTokenizer(br.readLine(), " "); String inst = st.nextToken(); switch(inst){ case "push": push(Integer.parseInt(st.nextToken())); break; case "pop": bw.write(String.valueOf(pop()) + "\n"); break; case "size": bw.write(String.valueOf(size) + "\n"); break; case "top": bw.write(String.valueOf(top()) + "\n"); break; case "empty": bw.write(String.valueOf(empty()) + "\n"); break; } } bw.flush(); bw.close(); }
메인 함수에서 직접 구현한 함수들이 switch 문 안에서 실행되도록 구현하였고,
실행 시간을 줄이기 위해 BufferReader, BufferWriter로 입출력하였습니다.
JAVA Stack 클래스 사용
스택을 사용하고자 할 때 항상 일일이 위의 코드를 작성하면 시간이 오래걸리고 귀찮겠죠 !
이러한 번거로움을 줄이고 성능을 높이기 위해 제공되는 클래스를 사용하는 방법을 익혀두셔야 합니다.
물론 stack을 정확히 이해했다면 위의 코드는 직접 짤 수 있어야 합니다!!
stack class를 제대로 사용하기 위해서 공식문서를 참고해봅시다.
https://docs.oracle.com/javase/10/docs/api/java/util/Stack.html
- java.util.Stack<E>
stack을 사용하기 위해 패키지를 불러오는 과정입니다.
import java.util.Stack;
- Stack<자료형> <스택 명> = new Stack<>(); // 스택 선언
사용할 스택과 스택에 들어갈 자료형과 함께 선언해줍니다.
Stack<String> Stack = new Stack<>();
- 스택 연산
위에서 설명하였던 연산들을 사용할 수 있습니다.
Stack<Integaer> stack = new Stack<>(); stack.push(3); //stack에 3을 삽입 stack.empty(); // stack이 비어있으면 true, 비어있지 않으면 false를 반환 stack.pop() // stack에 가장 위에 있는 값을 삭제 stack.peek() // stack에 가장 위에 있는 값을 반환 stack.search(3) // stack에서 3을 찾는 명령어 --> 있으면 위치 반환, 없으면 -1을 반환
'아가개발자 > 자료구조,알고리즘' 카테고리의 다른 글
[Java][백준 17413: 단어 뒤집기 2] (0) 2021.08.01 [Java][백준 1406: 에디터] (0) 2021.07.31 [Java][백준 1874: 스택수열] (0) 2021.07.30 [Java][백준 9012: 괄호] (0) 2021.07.29 [Java][백준 9093: 단어 뒤집기] (0) 2021.07.29