Study/알고리즘

Java: 스택(Stack)의 개념과 사용법

devyoseph 2021. 10. 22. 03:13

 

스택

먼저 들어온것이 나중에 나오는 자료

LIFO(Last In First Out)

 

 

상황으로 이해

짱구아빠는 a라는 일을 하고 있다

이 일을 마치기 전에 b라는 일을 해달라고 연락이 왔다

b를 마치기 전에 c라는 일을 해달라고 연락이 왔다

c를 마치기 전에 d라는 일을 해달라고 연락이 왔다

d를 끝냈다. 짱구아빠가 다음에 할 일은?

 

 

 

스택은 컵모양으로 설명한다

컵모양으로 위 예시를 설명하면, 위에서부터 d, c, b, a가 된다

 

 

용어 정리

push: 스택에 값을 넣는 것

pop: 스택의 가장 위의 값을 제거

top: 스택 가장 위에 있는 값을 출력

 

 

사용 예시

인터넷 브라우저

인터넷 브라우저의 뒤로 가기, 앞으로 가기 기능은

스택을 이용해서 구현할 수 있다

 

역순 문자열 만들기

문자열을 스택에 순서대로 집어넣으면

스택은 거꾸로 값을 꺼내준다

 

 

Java의 Stack

Java의 util에서 Stack 클래스를 지원한다

import java.util.Stack; //임포트 해준다
public class Main { static int[] arr; public static void main(String[] args){

Stack<Integer> stack= new Stack<Integer>(); //스택 클래스를 가져온다, 자료형은 Character, String 등 다양하게 가능

}}

스택을 가져오면 보이진 않지만

스택이 생성되어 있다

내부 메소드를 사용해 스택을 활용할 수 있다

Java Stack 내부 메소드
.push( input ) input 값을 스택에 넣어준다
.pop(); 맨 위 값을 return하는 동시에 제거한다
.peek(); 맨 위 값을 return한다
.isEmpty(); 스택이 비어있으면 true, 그 외는 false
.size(); 스택이 가지고 있는 원소 개수를 보여준다

 

주의점

스택이 비어있을 때 .pop()과 .peek()를 사용하면

Exception 오류가 발생한다

*오류가 발생하지 않도록

스택의 크기가 0이 아닐 때만

pop과 peek를 실행해야한다

*stack 관련 문제를 풀어보며 익숙해지는 것을 추천!