스택
먼저 들어온것이 나중에 나오는 자료
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 관련 문제를 풀어보며 익숙해지는 것을 추천!
'Study > 알고리즘' 카테고리의 다른 글
그리디 알고리즘(Greedy Algorithm)의 이해와 적용 (0) | 2021.11.02 |
---|---|
Java: 동적 계획법(Dynamic Programming) 개념과 이해 (0) | 2021.10.31 |
Java: 덱(Deque)의 개념과 사용 (0) | 2021.10.24 |
Java: 큐(Queue)의 개념과 사용법, 요세푸스 순열 (0) | 2021.10.22 |
알고리즘: 선형/비선형 구조와 브루트 포스(Brute Force) (0) | 2021.10.17 |