Developing Myself Everyday
article thumbnail
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.

명령어수신 탑(높이)

 

이중 우선순위 큐가 할 연산 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
profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!