문제 설명
이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.
명령어수신 탑(높이)
이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.
나의 풀이
이 문제는 제목에서 적혀있는 대로 우선순위 큐를 2개를 사용해야 하는 문제이다. 우선순위 큐는 FIFO 구조로 처음 들어간 데이터가 가장 먼저 나오게 된다.
최대, 최소 큐를 2개를 두고 똑같이 추가와 삭제를 해주고 해당하는 연산을 진행하면 된다.
import java.util.*
import kotlin.math.*
class Solution {
fun solution(operations: Array<String>): IntArray {
var answer = intArrayOf()
val pqMax = PriorityQueue<Int>(Collections.reverseOrder())
val pqMin = PriorityQueue<Int>()
operations.map {
val (oper, num) = it.split(" ")
if (oper == "I") {
pqMin.add(num.toInt())
pqMax.add(num.toInt())
}
else {
if (num.toInt() > 0) {
val max = pqMax.poll()
pqMin.remove(max)
} else {
val min = pqMin.poll()
pqMax.remove(min)
}
}
}
return if (pqMax.isEmpty()) intArrayOf(0, 0)
else intArrayOf(pqMax.poll(), pqMin.poll())
}
}
'프로그래머스 - kotlin > LEVEL 3' 카테고리의 다른 글
보석 쇼핑 - Kotlin (투 포인터) (0) | 2023.06.17 |
---|---|
불량 사용자 - Kotlin (DFS) (0) | 2023.06.15 |
베스트앨범 - Kotlin (구현) (0) | 2023.06.15 |
단어 변환 - Kotlin (DFS) (2) | 2023.06.15 |
네트워크 - Kotlin (BFS) (0) | 2023.06.14 |