Computer Science

Heap, Stack, Queue는 언제 쓰는 자료구조일까? for python

Balang 2025. 4. 16. 09:43
728x90

자료구조는 상황에 따라 골라야한다.

자료구조는 단순히 데이터를 담는 용기가 아니라,

어떤 방식으로 꺼낼 것인가를 정의합니다.


Stack (스택) - LIFO 구조

Last In, First Out - 나중에 넣은 게 넘저 나옴 (쌓는 접시 구조)

 

🟢 사용 예시

  • 웹 브라우저 뒤로 가기
  • 재귀 호출 (함수 호출 스택)
  • 괄호 짝 검사
stack = []
stack.append(1)
stack.append(2)
stack.append(3)
print(stack.pop())

# 3

🟧 시간 복잡도 : append() - O(1), pop() - O(1)


Queue (큐) - FIFO 구조

First In, First Out - 먼저 들어온 게 먼저 나옴 (줄 서기)

 

🟢 사용 예시

  • 프린트 작업 대기열
  • CPU 태스크 스케줄링
  • BFS (너부 우선 탐색)
from collections import deque

queue = deque()
queue.append(1)
queue.append(2)
queue.append(3)
print(queue.popleft())

# 1

🟧시간 복잡도 : append() - O(1), popleft() - O(1)


Heap (힙) - 우선순위 큐

항상 최댓값 또는 최솟값을 빠르게 꺼낼 수 있는 자료구조
  • 내부적으로는 이진 트리 구조
  • Python의 heapq는 Min Heap 기반
    (최소값이 먼저 나옴)

🟢 사용 예시

  • 우선순위가 있는 작업 스케줄링
  • Dijkstra 최단 경로
  • 실시간 Top-K 문제
import heapq

nums = [5, 2, 9, 1]
heapq.heapify(nums)      # 리스트를 힙으로 변환
heapq.heappush(nums, 3)  # 삽입
print(heapq.heappop(nums))

# 1 (최솟값)

 

 

🟧시간 복잡도 :  heappush, heappop – O(log n)


언제 사용해야 할까?

상황 추천 자료구조
나중에 넣은 걸 먼저 꺼내야 할 때 Stack
먼저 넣은 걸 먼저 꺼내야 할 때 Queue
우선순위에 따라 처리하고 싶을 때 Heap
  • 괄호 검사 → Stack
  • BFS 탐색 → Queue
  • 실시간 인기 검색어 Top 10 → Heap
  • 병합 정렬의 병합 단계 → Queue or Stack (depending on impl.)

 

728x90
반응형