
“쌓는다” 라는 개념의 자료구조이다.
위 그림처럼 상자를 1,2,3,4 차례로 넣고 뺄때 4,3,2,1 순으로 나오듯,
가장 나중에 들어간 데이터가 가장 먼저 나온다.
이를 LIFO 구조 (Last In, First Out)라 한다.
| 연산 | 의미 |
|---|---|
| push() | 데이터를 스택에 "넣는다" |
| pop() | 데이터를 스택에서 "꺼낸다" |
| peek() | 스택의 맨 위 데이터를 "확인" |
| is_empty() | 스택이 비었는지 확인 |
스택: [1]
스택: [1, 2]
스택: [1, 2, 3] ← 3 push
스택: [1, 2] ← 3 pop
스택: [1] ← 2 pop
| 연산 | 시간복잡도 |
|---|---|
| push() | O(1) |
| pop() | O(1) |
| peek() | O(1) |
→ 모든 연산이 빠름

큐는 스택과 정반대 방식으로, "먼저 들어간 데이터가 먼저 나오는 자료구조"이다.
즉, 선입선출(FIFO, First In First Out) 구조
치킨을 주문했을 때, 주문을 “큐” 방식으로 저장해야지 먼저 주문한 사람의 치킨이 빨리 나올 것!
| 연산 | 설명 |
|---|---|
| enqueue() | 데이터를 "뒤"에 추가 (삽입) |
| dequeue() | 데이터를 "앞"에서 제거 (꺼냄) |
| peek() | 맨 앞의 데이터를 확인 (삭제 X) |
| is_empty() | 큐가 비었는지 확인 |
enqueue(1) → [1]
enqueue(2) → [1, 2]
enqueue(3) → [1, 2, 3]
dequeue() → [2, 3] → 1 출력
dequeue() → [3] → 2 출력
queue = []
# enqueue
queue.append(5)
queue.append(7)
# dequeue (비효율: O(N))
print(queue.pop(0)) # 5
print(queue.pop(0)) # 7
pop(0)은 리스트의 앞쪽 데이터를 빼면 나머지를 모두 앞으로 당겨야 해서 O(N)from collections import deque
queue = deque()
# enqueue
queue.append(5)
queue.append(7)
# dequeue (O(1))
print(queue.popleft()) # 5
print(queue.popleft()) # 7
| 연산 | 시간 복잡도 (deque 기준) |
|---|---|
| enqueue() | O(1) |
| dequeue() | O(1) |
| peek() | O(1) |