DSData StructuresPython learning path
0 / 12 완료
LESSON 09

힙과 우선순위 큐

전체 정렬 없이 지금 가장 중요한 항목만 빠르게 꺼내는 구조

왜 힙과 우선순위 큐을 쓸까요?

항상 최솟값이나 최댓값 하나만 필요할 때 전체를 매번 정렬하는 것은 낭비입니다. 힙은 가장 우선인 값의 빠른 접근과 삽입을 균형 있게 제공합니다.

LIFE EXAMPLE

생활 속에서 먼저 이해해 볼까요?

코드를 생각하지 말고, 아래 상황이 어떤 순서로 움직이는지만 따라가 보세요.

현실 예시 1

응급실 접수

먼저 온 감기 환자가 있어도 방금 온 위급 환자를 먼저 진료할 수 있습니다.

자료구조와 연결하면도착 순서가 아니라 가장 높은 우선순위를 빠르게 꺼내는 힙입니다.
현실 예시 2

오늘 할 일

모든 할 일을 완벽히 정렬하기보다 마감이 가장 가까운 일 하나를 계속 골라 처리합니다.

자료구조와 연결하면현재 가장 중요한 항목만 빠르게 찾으면 될 때 힙이 알맞습니다.

실무에서는 이렇게 씁니다

코딩 테스트의 장난감 예제를 넘어, 실제 시스템에서 같은 원리가 어디에 숨어 있는지 연결해 보세요.

01

작업 스케줄러

실행 시각이나 우선순위가 가장 앞선 작업을 꺼냅니다.

02

상위 K개

스트리밍 데이터에서 가장 큰 K개만 작은 힙에 유지합니다.

03

경로 탐색

다익스트라에서 현재까지 거리가 가장 짧은 정점을 선택합니다.

04

응급실 배정

접수 순서와 무관하게 가장 위급한 환자를 먼저 진료합니다.

05

실시간 인기 검색어

검색량이 높은 상위 항목만 계속 유지해 순위를 갱신합니다.

어떤 원리로 동작하나요?

최소 힙에서는 부모가 자식보다 작거나 같습니다. 완전 이진 트리를 배열에 저장하며, 삽입·삭제 후 위아래로 교환해 규칙을 복구합니다. peek는 O(1), push/pop은 O(log n)입니다.

핵심 연산과 비용

연산Python 표현시간
힙 만들기heapq.heapifyO(n)
삽입heappushO(log n)
최솟값 제거heappopO(log n)
최솟값 보기heap[0]O(1)
STEP BY STEP

3, 1, 2를 최소 힙에 넣기

  1. 1
    3 삽입heap = [3]
  2. 2
    1 삽입부모 3과 교환 → heap = [1, 3]
  3. 3
    2 삽입부모 1보다 크므로 heap = [1, 3, 2]
  4. 4
    pop1 제거 후 복구 → heap = [2, 3]

⚠ 자주 하는 실수

  • 힙 배열 전체가 정렬된 것은 아닙니다. 루트만 최솟값임이 보장됩니다.
  • 파이썬 heapq는 최소 힙입니다. 최대 힙은 보통 값의 부호를 바꿔 구현합니다.
  • 우선순위가 같은 객체를 넣을 때 두 번째 비교 기준이 필요할 수 있습니다.