스택은 LIFO (Last In, First Out) 구조를 가지는 자료구조로, 가장 나중에 삽입된 데이터가 가장 먼저 제거됩니다.
스택은 배열(Array)이나 연결 리스트(Linked List)를 사용해 구현할 수 있습니다. Java에서는 Stack 클래스를 사용하거나, Deque를 활용할 수 있습니다.
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
// Push
stack.push(10);
stack.push(20);
stack.push(30);
// Peek
System.out.println("Top element: " + stack.peek()); // 30
// Pop
System.out.println("Popped element: " + stack.pop()); // 30
// Remaining elements
System.out.println("Stack: " + stack); // [10, 20]
}
}
큐는 FIFO (First In, First Out) 구조를 가지는 자료구조로, 가장 먼저 삽입된 데이터가 가장 먼저 제거됩니다.
큐는 배열(Array)이나 연결 리스트(Linked List)를 사용해 구현할 수 있습니다. Java에서는 Queue 인터페이스와 이를 구현한 LinkedList, ArrayDeque 등을 사용합니다.
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
// Enqueue
queue.add(10);
queue.add(20);
queue.add(30);
// Peek
System.out.println("Front element: " + queue.peek()); // 10
// Dequeue
System.out.println("Removed element: " + queue.poll()); // 10
// Remaining elements
System.out.println("Queue: " + queue); // [20, 30]
}
}
| 특징 | 스택 | 큐 |
|---|---|---|
| 구조 | LIFO (Last In, First Out) | FIFO (First In, First Out) |
| 데이터 삽입/제거 | 하나의 끝에서 삽입 및 제거 | 앞에서 제거, 뒤에서 삽입 |
| 사용 사례 | DFS, 괄호 검증 | BFS, 프로세스 관리 |
스택과 큐는 간단하지만 많은 알고리즘과 문제 해결의 기본이 되는 자료구조입니다. 특히, 문제에서 "순서"와 관련된 요구 사항이 있을 때, 두 자료구조를 활용하면 적합한 해결책을 쉽게 떠올릴 수 있었습니다. 앞으로 다양한 문제에서 스택과 큐를 활용해 보고 싶습니다.