코테

(코테) [Java] Heap

그린티_ 2025. 5. 15. 20:47
반응형

Heap (힙) - 우선순위가 있는 트리형 자료구조

 

개념 요약

  • 힙은 완전 이진 트리 기반우선순위 큐
  • Min Heap: 부모가 자식보다 항상 작다 → 작은 값이 먼저 나옴
  • Max Heap: 부모가 자식보다 항상 크다 → 큰 값이 먼저 나옴
  • 대표적 연산:
    • insert / offer()
    • poll() → 가장 우선순위 높은 원소 제거 및 반환
    • peek() → 제거 없이 가장 우선 원소 확인

 

구조 그림 (Min Heap)

       1
     /   \\
    3     5
   / \\   / \\
  8  10  7  9
  • 삽입/삭제 시 자동 정렬되도록 구조 유지됨

 

Java 코드 예시

최소 힙 (Min Heap)

import java.util.PriorityQueue;

public class MinHeapExample {
    public static void main(String[] args) {
        PriorityQueue<Integer> minHeap = new PriorityQueue<>();

        minHeap.offer(4);
        minHeap.offer(1);
        minHeap.offer(7);

        System.out.println(minHeap.poll());  // 1
        System.out.println(minHeap.poll());  // 4
    }
}

 

최대 힙 (Max Heap)

import java.util.PriorityQueue;
import java.util.Collections;

public class MaxHeapExample {
    public static void main(String[] args) {
        PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());

        maxHeap.offer(4);
        maxHeap.offer(1);
        maxHeap.offer(7);

        System.out.println(maxHeap.poll());  // 7
        System.out.println(maxHeap.poll());  // 4
    }
}

 

힙 활용 예시

  • 다익스트라 알고리즘
  • 우선순위가 있는 작업 스케줄링
  • K번째 최소/최대값 찾기
  • Median 문제 해결 (중앙값 힙)

 

구조 Java 클래스 특징
Min Heap PriorityQueue<>() 기본 정렬: 오름차순
Max Heap PriorityQueue<>(Collections.reverseOrder())
PriorityQueue<Integer> pq = new PriorityQueue<>((a,b) -> b-a);
내림차순 우선순위 부여

이렇게 안에 () 조건을 더 걸어줄 수도 있음!

배열에 대해서 [1]번째 배열 값 비교도 가능하니 여러 방식으로 활용하는 눈을 키워보기!

반응형

'코테' 카테고리의 다른 글

(코테) [Java] DFS  (1) 2025.05.20
(코테) [Java] 재귀  (1) 2025.05.20
(코테) [Java] Deque  (0) 2025.05.15
(코테) [Java] Queue  (0) 2025.05.15
(코테) [Java] Stack  (0) 2025.05.15