Stack이란?
: 후입선출(Last In Frist Out(LIFO)) 자료구조 ( → 말 그대로 마지막에 들어온 데이터가 가장 먼저 나가는 자료구조)
주로 데이터가 입력된 순서의 역순으로 처리되어야 할 때 사용된다.
* Stack 선언
: Stack<object> stack = new Stack<>();
object부분에는 String, Integer, Character 등 다양하게 사용 가능
Stack의 메소드(Push, Pop, Peek, Empty, Size, Contains)
1. 데이터 추가(Push)
: .push()를 이용하여 데이터를 추가할 수 있다. 아래에서부터 데이터를 차곡차곡 쌓는다고 생각하면 된다.
import java.util.Stack;
public class Main {
public static void main(String args[]){
Stack<String> stack = new Stack<>();
stack.push("Data1");
stack.push("Data2");
stack.push("Data3");
stack.push("Data4");
}
}
2. 데이터 꺼내기(Pop)
: Pop()을 이용하여 데이터를 꺼낼 수 있다. 맨 위의 데이터부터 하나씩 빼낸다고 생각하면 된다.
* 만약 데이터가 없는 상태에서 Pop()을 실시하면 EmptyStackException 에러 발생
import java.util.Stack;
public class Main {
public static void main(String args[]){
Stack<String> stack = new Stack<>();
stack.push("Data1");
stack.push("Data2");
stack.push("Data3");
stack.push("Data4");
System.out.println(stack); // [Data1, Data2, Data3, Data4]로 들어있는 상태. Data1이 가장 밑, Data4가 가장 위에 위치
stack.pop(); // pop을 실행했을 때, 가장 위에 있는 Data4가 제거되며 남은 데이터는 [Data1, Data2, Data3]
stack.pop(); // pop을 실행했을 때, 가장 위에 있는 Data3가 제거되며 남은 데이터는 [Data1, Data2]
stack.pop(); // pop을 실행했을 때, 가장 위에 있는 Data2가 제거되며 남은 데이터는 [Data1]
stack.pop();// pop을 실행했을 때, 가장 위에 있는 Data1이 제거되며 남은 데이터는 [] (없다)
stack.pop(); // 만약 stack에 아무 데이터가 없는 상태에서 Pop을 한다면? → EmptyStackException 에러 발생
}
}
3. 가장 마지막에 들어간 데이터 확인(Peek)
: 가장 마지막에 있는 데이터(제일 위에 있는 값)을 확인하고 싶다. 라고 할때는 Peek()를 사용한다.
import java.util.Stack;
public class Main {
public static void main(String args[]){
Stack<String> stack = new Stack<>();
stack.push("Data1");
stack.push("Data2");
stack.push("Data3");
stack.push("Data4");
System.out.println(stack); // [Data1, Data2, Data3, Data4]로 들어있는 상태. Data1이 가장 밑, Data4가 가장 위에 위치
System.out.println(stack.peek()); // 결과 값 : Data4(가장 위의 Data4를 출력해줌)
stack.pop();// pop을 실행했을 때, 가장 위에 있는 Data4가 제거되며 남은 데이터는 [Data1, Data2, Data3]
System.out.println(stack.peek()); // 결과 값 : Data3(가장 위의 Data3를 출력해줌)
}
}
4. Stack의 사이즈 확인 (Size)
: 현재 Stack에 들어가 있는 데이터의 개수를 확인한다.
import java.util.Stack;
public class Main {
public static void main(String args[]){
Stack<String> stack = new Stack<>();
stack.push("Data1");
stack.push("Data2");
stack.push("Data3");
stack.push("Data4");
System.out.println(stack.size()); // 결과 값 : 4
}
}
5. Stack에 특정 값이 들어가 있는지 확인(Contains)
: stack.contains(찾고자 하는 값); 으로 사용한다. 찾는 값이 존재하면 True, 존재하지 않는다면 False를 반환한다.
import java.util.Stack;
public class Main {
public static void main(String args[]){
Stack<String> stack = new Stack<>();
stack.push("Data1");
stack.push("Data2");
stack.push("Data3");
stack.push("Data4");
System.out.println(stack.contains("Data1")); // 결과 값 : true(Data1이 stack안에 들어있음)
System.out.println(stack.contains("Data5")); // 결과 값 : false(Data5는 stack안에 들어있지 않음)
}
}
6.Stack이 비어있는지 확인(Empty)
:Stack이 비어있다면(데이터가 존재하지 않는다면) True, 그렇지 않다면 False를 반환한다.
import java.util.Stack;
public class Main {
public static void main(String args[]){
Stack<String> stack = new Stack<>();
stack.push("Data1");
stack.push("Data2");
stack.push("Data3");
stack.push("Data4");
System.out.println(stack.empty()); // 결과 값 : false(데이터가 존재)
stack.pop();
stack.pop();
stack.pop();
stack.pop();
System.out.println(stack.empty()); // 결과 값 : true(데이터가 존재하지 않음)
}
}
출처 : Stack (Java Platform SE 7 ) (oracle.com)
Java Platform SE 7
docs.oracle.com
Stack 활용 문제
[백준] 문제번호 4949 (균형잡힌 세상)(java) (tistory.com)
[백준] 문제번호 4949 (균형잡힌 세상)(java)
<문제 4949 - 균형잡힌 세상> [문제] [답안] import java.io.*; import java.util.Stack; public class Main { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedR..
rimmee97.tistory.com
'Java 개념정리' 카테고리의 다른 글
[Java] 트리(Tree) (0) | 2022.10.12 |
---|---|
[Java] Queue (0) | 2022.10.04 |
[java] Dynamic Programming(DP / 동적 계획법) (0) | 2022.09.27 |
[java] String 클래스 (0) | 2022.08.20 |
[Java] 변수 (0) | 2022.08.17 |