Stack이란?
"스택을 쌓는다" 라는 표현을 실생활에서도 간간히 사용하기 때문에,
큐와는 다르게 그나마 기억하기가 편한 것 같습니다.
자료구조의 일종으로서 큐(Queue)와는 다르게 후입선출의 형식입니다. - LIFO(Last In First Out)
나중에 들어오는 값이 가장 먼저 나가는 것으로,
큐와는 다르게 Index의 개념이 존재합니다.
큐보다 실생활에 적용, 비유되는 부분이 많습니다.
쓰레기통...바구니...벽돌쌓기...등등
깊이우선탐색(DFS)에서 사용되기도 하며, 재귀함수에도 많이 사용됩니다.
Stack<Integer> stack = new Stack<Integer>();
Stack<객체> 변수명 = new Stack<객체>();
큐와는 달리 Stack만을 Import하여 사용합니다.
⚙️ Stack에 값을 추가하는 방법(add와 push의 차이점)
stack.pust(i);
stack.add(i);
- Stack변수.push(값);
- Stack변수.add(값);
2가지 방법이 있으며, 과정은 비슷하나 결과가 다릅니다.
⚙️ Stack 값 출력
stack.peek();
Stack변수.peek();
이렇게 사용할 경우 현재 Stack의 가장 마지막에 들어간 값, 가장 먼저 출력될 값이 출력되게 됩니다.
큐와 동일하게 Stack이 비어있을 경우 null을 return하기 때문에, 조건식에서도 사용됩니다.
⚙️ Stack 값 삭제(출력)
stack.pop();
stack.clear();
stack.remove(i);
- Stack변수.pop();
- Stack변수.clear();
- Stack변수.remove(i);
와 같이 사용할 수 있으며, 각각의 차이를 확인해보겠습니다.
clear - Stack을 전체 비움
pop - 튀어나온다는 영어해석처럼 가장 먼저 출력할 대상을 삭제하며, 출력합니다.
= 가장 나중에 넣은 값, 가장 끝의 index
remove - remove는 index를 주지 않을 경우 pop과 동일하게 가장 먼저 출력할 대상을 삭제하고,
파라미터로 index를 줄 경우 해당 index에 해당하는 값을 삭제합니다.(해당 값 출력X)
문제 java 10828 스택
import java.util.Scanner;
public class Main {
public static int[] stack;
public static int size = 0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int N = in.nextInt();
stack = new int[N];
for(int i = 0; i < N; i++) {
String str = in.next();
switch (str) {
case "push":
push(in.nextInt());
break;
case "pop":
sb.append(pop()).append('\n');
break;
case "size":
sb.append(size()).append('\n');
break;
case "empty":
sb.append(empty()).append('\n');
break;
case "top":
sb.append(top()).append('\n');
break;
}
}
System.out.println(sb);
}
public static void push(int item) {
stack[size] = item;
size++;
}
public static int pop() {
if(size == 0) {
return -1;
}
else {
int res = stack[size - 1];
stack[size - 1] = 0;
size--;
return res;
}
}
public static int size() {
return size;
}
public static int empty() {
if(size == 0) {
return 1;
}
else {
return 0;
}
}
public static int top() {
if(size == 0) {
return -1;
}
else {
return stack[size - 1];
}
}
}
728x90
'Study > 코딩스터디_TIL' 카테고리의 다른 글
[JAVA 스터디] Queue 개념 (0) | 2025.02.05 |
---|---|
[JAVA 스터디] Stack 과 Queue (0) | 2025.02.04 |
[JAVA 스터디] Map getOrDefault 사용법 (0) | 2025.01.25 |
[JAVA 스터디] BufferedReader / BufferedWriter (0) | 2025.01.23 |
[JAVA 스터디] 250122 Map 객체 활용 (1) | 2025.01.22 |