왜 필요한가
매번 배열을 정렬하면 느립니다. 가장 작은(또는 큰) 것만 자주 필요하면 힙(우선순위 큐)이 맞습니다.
연산
| 연산 | 대략 |
|---|---|
| 삽입 | O(log n) |
| 최솟값(최대힙이면 최대) 조회 | O(1) |
| 꺼내기 | O(log n) |
JS / Python
- Python:
heapq(최소 힙). 최대는 부호 반전 트릭. - JS: 표준 라이브러리 힙이 약합니다. 연습 문제에선 정렬로 대체하거나 직접 배열+정렬로 근사해도 됩니다.
import heapq
h = []
heapq.heappush(h, 3)
heapq.heappush(h, 1)
print(heapq.heappop(h)) # 1
문제 패턴
- 상위 k개
- 두 배열 병합 감각
- “매 순간 최소 비용”
함정
- 최대 힙을 최소 힙 API로 쓰려면 부호/우선순위 튜플을 명확히
- 같은 값이 여러 개일 때 인덱스까지 튜플로
연습
숫자 목록에서 가장 작은 3개를 출력하는 함수를 연습장에서 작성해 보세요. 정렬과 힙의 차이를 말로 설명해 보세요.
사이트에서
브라우저 채점 환경에서는 힙 라이브러리가 제한될 수 있습니다. 개념을 익힌 뒤, 작은 n은 정렬로 풀어도 됩니다.
한 줄
> 반복해서 “제일 ○○한 것”만 필요하면 힙을 떠올려라.
더 깊게
읽은 뒤 연습장에서 예제 코드를 한 번 타이핑해 보세요. 눈으로만 보면 하루 뒤 사라집니다.
관련 원리 카드와 문제 태그로 바로 이어서 풀면, 문법·패턴이 한 묶음으로 남습니다.
막히면 30분 규칙: 입력을 로그로 확인 → 기대/실제 한 줄 비교 → 그래도 안 되면 배우기 레슨으로 잠시 복귀.