Code in

프로그래머스 힙 이중우선순위큐 with Kotlin 본문

알고리즘 스터디_문제풀이

프로그래머스 힙 이중우선순위큐 with Kotlin

heyhmin 2020. 8. 12. 02:14

프로그래머스의 부분 이중우선순위큐 문제입니다.

IntelliJ에서의 풀이입니다.

import java.util.PriorityQueue
// Kotlin은 JVM: Java Virtual Machine 을 사용하기 때문에 Java에서 import합니다.

val operations: Array<String> = arrayOf("I 7", "I 5", "I -5", "D -1")
// "I 7", "I 5", "I -5", "D -1"    // 7, 5
// "I 16", "D 1"  // 0, 0
fun solution(operations: Array<String>): IntArray {
    var answer = intArrayOf()
    val minHeap = PriorityQueue<Int>() // min Heap 생성
    val maxHeap = PriorityQueue<Int>(compareByDescending{it})
    // max Heap 생성, Descending, 기준은 Int형 요소 = it

    operations.forEach { // it은 String
        val tmp = it.split(" ")
        // tmp는 List<String> 형식으로, 선언과 동시에 초기화.
        // split의 delimiters는 " "으로 whiteSpace 공백
        when(tmp[0]){ // 첫번째 글자
            "I" -> {// I일 경우, min max에 String.toInt()하여 더함
                minHeap.add(tmp[1].toInt())
                maxHeap.add(tmp[1].toInt())
            }
            "D" -> { // D일 경우, min max에서 같은 값을 삭제
                if (minHeap.isEmpty()) // null이면 no action
                else if ( tmp[1].toInt() > 0 )
                    minHeap.remove(maxHeap.poll())
                else
                    maxHeap.remove(minHeap.poll())                
            }
        }
    }

    if (minHeap.isEmpty()){ // 1개가 empty면 2개 다 empty
        answer += 0
        answer += 0
    }else{
        answer += maxHeap.peek() // 최댓값
        answer += minHeap.peek() // 최솟값
    }
    return answer
}
fun main() {
    print(solution(operations).contentToString()) // 0, 0
}

URL: https://programmers.co.kr/learn/courses/30/lessons/42628#qna

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr

 

Comments