leetcode 20번 문제에서 자료구조로 스택을 사용해야했다.
스택을 공부한지 너무 오래되어 다시 정리하고자 한다.
https://joey-program.tistory.com/83
스택이란?
스택은 영어로 '쌓다', '쌓아 올린 더미'를 의미한다.
의미와 동일하게 자료구조의 스택(stack) 역시 비슷한 특징을 지닌다.
LIFO(Last In First Out)이라는 특징을 갖는데 예를 들어 긴 발포비타민 통을 생각하면 된다.
한 쪽은 막혀있고 한쪽에서만 비타민을 뺄 수 있는 형식인 것이다.
자바에서는 java.util.Stack 클래스를 통해 stack(스택) 동작을 제공하고 있다. 큐(Queue) 왁 같이 사용해 다양한 문제 해결을 할 수 있다.
스택 사용법
class Solution {
public static void main(String[] main) {
Stack<String> stack = new Stack<Character>();
stack.push("1");
stack.push("2");
stack.push("3");
//스택에서 최상단 값 출력
System.out.println(stack.peek());
//스택에서 데이터 꺼내기
stack.pop();
}
}
java.util.Stack 클래스를 통해 스택을 구현할 수 있다.
Stack<Element> stack = new Stack<>();
기본적으로 위와 같이 사용한다.
스택추가 (push)
stack.push("1");
stack.push("2");
stack.push("3");
데이터를 push() 메소드를 이용해서 추가하게되면 차곡차곡 데이터가 쌓이게된다.
현재 stack에 가장 최상단에 있는 데이터는 "3"이다.
java.util.Stack 클래스에서는 별도의 사이즈를 명시하지 않는다. 처음 스택이 생성되면 10개의 데이터를 저장할 수 있는 공간이 할당된다. 데이터 수가 10개가 넘어가게되면 현재 스택사이즈의 2배에 해당하는 공간이 할당되고 기존 데이터를 복사한다. (배열과 비슷한 특성이 있다.)
스택제거 (pop)
stack.pop();
//pop()을 사용하게 되면 "2","1" 값만 남는다.
최상단의 데이터를 pop()메소드를 이용해서 제거가 가능하다.
기타
size() - 현재 스택에 들어있는 데이터의 갯수를 리턴한다.
clear() - 스택에 있는 모든 데이터를 한번에 지워준다.
empty() - 스택이 비어있는지 유무 판단.
contains() - stack에 특정데이터가 포함되어 있는지 체크한다.
push() vs add() 차이
push()는 stack에서 제공, add()는 List에서 제공하는 메서드이다.
push()의 리턴값은 <E>이고, add()의 리턴값은 boolean이다.
차이점도 있고 가독성이 떨어지기 때문에 stack을 써서 코드를 짜고 있다면 push() 메서드를 사용해야한다.
참고