안녕하세요! 오늘은 자료구조에서 꼭 배우는 Stack(스택)과 Queue(큐)에 대해 알아보겠습니다.
일상에서 쉽게 접할 수 있는 예시와 함께 이해해 봅시다! 😊
1. Stack(스택)이란?
Stack은 LIFO(Last In, First Out) 구조입니다.
"마지막에 들어간 것이 가장 먼저 나온다"는 뜻이에요.
📦 일상 속 스택 예시:
프링글스 과자를 떠올려보세요.
- 공장에서는 아래부터 과자를 담아 포장을 하게 됩니다.
- 먹는 사람은 과자를 꺼낼때 제일 위에 있는 과자를 먼저 꺼내게 됩니다.
이처럼, Stack은 데이터를 위에서 쌓고 꺼내는 방식이에요.
🛠 스택의 주요 동작
- Push: 데이터를 스택에 넣는다.
- Pop: 데이터를 스택에서 꺼낸다.
- Peek: 가장 위에 있는 데이터를 확인한다(꺼내지는 않음).
💻 코드로 보는 스택
파이썬의 리스트를 활용한 간단한 예제를 볼까요?
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
// 데이터를 스택에 넣기 (Push)
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println("Stack after push: " + stack); // [1, 2, 3]
// 데이터를 스택에서 꺼내기 (Pop)
int lastItem = stack.pop();
System.out.println("Popped item: " + lastItem); // 3
System.out.println("Stack after pop: " + stack); // [1, 2]
// 스택의 가장 위 데이터 확인 (Peek)
int topItem = stack.peek();
System.out.println("Peeked item: " + topItem); // 2
System.out.println("Stack after peek: " + stack); // [1, 2]
}
}
2. Queue(큐)란?
Queue는 FIFO(First In, First Out) 구조입니다.
"먼저 들어간 것이 가장 먼저 나온다"는 뜻이에요.
📦 일상 속 큐 예시:
줄 서기를 생각해보세요!
- 먼저 줄을 선 사람이 먼저 서비스를 받습니다.
- 뒤에 줄 선 사람은 차례를 기다려야 하죠.
이처럼 Queue는 데이터를 줄 세우는 방식입니다.
🛠 주요 동작 (Java에서의 큐 메서드 이름)
- add / offer: 데이터를 큐에 넣습니다.
- add: 큐가 가득 차 있으면 예외(IllegalStateException)를 발생시킵니다.
- offer: 큐가 가득 차 있으면 false를 반환합니다.
- poll: 데이터를 큐에서 꺼냅니다.
- 데이터가 없으면 null을 반환합니다.
- peek: 큐의 첫 번째 데이터를 확인합니다.
- 데이터를 제거하지 않으며, 큐가 비어 있으면 null을 반환합니다.
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
// 데이터를 큐에 넣기 (add)
queue.add(1);
queue.add(2);
queue.add(3);
System.out.println("Queue after enqueue: " + queue);// [1, 2, 3]
// 데이터를 큐에서 꺼내기 (poll)
int firstItem = queue.poll();
System.out.println("Dequeued item: " + firstItem); // 1
System.out.println("Queue after dequeue: " + queue); // [2, 3]
// 큐의 첫 번째 데이터 확인 (peek)
int frontItem = queue.peek();
System.out.println("Peeked item: " + frontItem); // 2
System.out.println("Queue after peek: " + queue); // [2, 3]
}
}
3. 스택과 큐의 차이점
특징Stack (스택)Queue (큐)
특징 | Stack (스택) | Queue (큐) |
원리 | LIFO (Last In, First Out) | FIFO (First In, First Out) |
예시 | 책 더미 | 줄 서기 |
사용법 | push, pop, peek | add/offer, poll, peek |
4. 언제 스택과 큐를 사용할까요?
✅ 스택 사용 사례
- 웹 브라우저의 뒤로 가기
- 방문한 페이지를 스택에 저장하고, 뒤로 가기를 누르면 마지막 페이지부터 돌아갑니다.
- Undo(되돌리기)
- 작업 기록을 스택에 저장하고, 되돌릴 때 마지막 작업을 꺼냅니다.
✅ 큐 사용 사례
- 프린터 작업 대기열
- 먼저 들어온 작업부터 출력됩니다.
- 멀티플레이 게임 대기열
- 대기열에 등록된 순서대로 플레이어가 참가합니다.
5. 요약
- 스택(Stack): LIFO 구조로, "마지막에 넣은 것이 먼저 나온다."
- 큐(Queue): FIFO 구조로, "먼저 넣은 것이 먼저 나온다."
- 일상 예시
- 스택: 책 더미
- 큐: 줄 서기
6. 연관 코테 문제들 (Stack vs Queue)
'코테' 카테고리의 다른 글
Hash Set이란? (1) | 2024.11.18 |
---|