Kotlin 코딩테스트의 Kick! 우선순위큐 (Priority Queue)
2025. 2. 15. 19:13ㆍ프로그래밍 언어/Kotlin 기초
728x90
반응형
알고리즘 공부를 하면서 은근 자주 쓰게 되는 기능. 우선순위 큐 ~!
어떤 것일까?
우선순위 큐 (Priority Queue)
- 우선순위가 높은 요소부터 꺼내는 자료 구조
- 기본적으로 힙(Heap) 구조를 사용하여 내부적으로 요소들을 정렬
✅ 특징
- 자동 정렬
- 요소를 add()하면 우선순위가 높은 순서로 정렬됨.
- 하지만 poll()을 호출할 때까지 정렬된 상태는 아니며, 꺼낼 때 우선순위에 따라 자동으로 정렬됨.
- 우선순위 기반
- 우선순위가 높은 요소를 먼저 처리하며, 기본적으로 최소 힙(Min-Heap)을 사용.
- 즉, 가장 작은 값을 우선적으로 꺼냄.
- 최대 힙(Max-Heap)을 사용하려면 Comparator를 설정해야함
- 삽입 시간
- add() 또는 offer()는 O(log n) 시간 복잡도
- 꺼내는 시간
- poll()은 O(log n) 시간 복잡도
✅ 기본 동작 (최소 힙)
기본적으로 PriorityQueue는 최소 힙(Min-Heap)을 사용하여 가장 작은 값부터 꺼다.
kotlin
복사편집
import java.util.PriorityQueue
fun main() {
val pq = PriorityQueue<Int>()
pq.add(5)
pq.add(1)
pq.add(3)
println(pq.poll()) // 1 (가장 작은 값)
println(pq.poll()) // 3
println(pq.poll()) // 5
}
위 예제에서 PriorityQueue는 기본적으로 가장 작은 값부터 꺼낸다.
✅ 최대 힙 사용 (내림차순 정렬)
Comparator를 사용하면 최대 힙(Max-Heap)을 사용할 수 있다. 이 경우 가장 큰 값을 먼저 꺼낸다.
import java.util.PriorityQueue
fun main() {
val pq = PriorityQueue<Int>(compareByDescending { it }) // 내림차순 정렬
pq.add(5)
pq.add(1)
pq.add(3)
println(pq.poll()) // 5 (가장 큰 값)
println(pq.poll()) // 3
println(pq.poll()) // 1
}
위 예제에서는 compareByDescending { it }을 사용하여 내림차순(가장 큰 값을 먼저 꺼내는) 우선순위 큐를 만들어
역순으로 출력하여 가장 큰 값을 꺼낸다.
728x90
반응형
'프로그래밍 언어 > Kotlin 기초' 카테고리의 다른 글
Kotlin에서 == vs === 차이 (1) | 2025.03.18 |
---|---|
Kotlin에서 유용한 고차 함수 정리 (0) | 2025.02.27 |
Kotlin inline 함수, 진짜 성능 최적화에 도움이 될까? (0) | 2025.02.07 |
Kotlin 상태 관리 | Sealed Class vs Enum Class 차이점 (0) | 2025.02.06 |
Kotlin에서 launch와 async는 무엇이 다를까? (0) | 2025.02.03 |