자료구조 중 스택(Stack)은 ‘쌓다’, ‘더미’라는 의미를 가지고 있다. 물건을 차곡차곡 쌓아 올리듯 데이터를 쌓아 올리는 자료구조이다. 스택(Stack)은 큐(Queue)와 함께 자바에서 사용되는 가장 기본적인 자료구조 중 하나다.
스택(Stack)은 마지막에 추가된 데이터가 먼저 나오는 특징을 가지고 있다. 이러한 동작을 LIFO(Last In First Out)이라고 한다. 함께 많이 사용되는 큐(Queue)의 경우 먼저 추가된 데이터가 먼저 나오는 특징 이며 FIFO(First In First OUT) 동작을 갖는것과 비교된다.
| Modifier and Type | Method | Description |
|---|---|---|
| boolean | empty() | 스택이 비어있는지 여부를 반환한다. |
| E | peek() | 스택의 최상단에 있는 원소 값을 반환한다. (단, 원소를 제거하지는 않는다.) |
| E | pop() | 스택의 최상단에 있는 원소를 제거하고, 그 값을 반환한다. |
| E | push(E item) | 스택의 상단에 item 원소를 삽입한다. |
| int | search(Object o) | 스택에서 Object o의 위치를 반환한다. |
예제코드
매개변수로 주어진 문자열 s에 대해서 같은 문자 짝지어 제거하기
문자열 s를 for:each 반복문으로 stack을 활용해 짝지은 문자를 제거한다.
if 문 : 스택이 비어있지 않고 스택의 최상단 데이터가 현재 넣으려는 문자와 일치하면 스택의 최상단 데이터를 삭제
그렇지 않다면 스택에 넣는다.
import java.util.Stack;
public static int solution(String s) {
Stack<Character> stack = new Stack<>();
for(char ch : s.toCharArray()){
if(!stack.isEmpty() && stack.peek() == ch) stack.pop();
else stack.push(ch);
}
return stack.isEmpty() ? 1 : 0;
}