Daily LeetCode Challenge - 1046. Last Stone Weight

Min Young Kim·2023년 4월 24일
0

algorithm

목록 보기
127/198

Problem From.

https://leetcode.com/problems/last-stone-weight/

오늘 문제는 IntArray 가 주어졌을때, 그 안에서 제일 큰 원소를 두개 뽑아서 각자 비교한 다음에 그 숫자가 다르다면 큰 원소에서 작은 원소를 뺀 값을 다시 넣어주고, 같다면 두 숫자를 모두 빼버리는 과정을 반복한뒤에 마지막에 남아있는 숫자를 반환하는 문제였다.

이 문제는 Priority Queue 를 이용하면 간단하게 풀 수 있었는데,
priority Queue 의 순서를 내림차순으로 선언하고, 숫자를 모두 넣은 다음에 두개를 꺼내서 비교하고, 두 숫자가 같다면 모두 poll() 아니라면 큰수에서 작은 수를 뺀 값을 다시 넣어주는것을 queue 의 크기가 1 이하가 될 때까지 반복해주었다.

class Solution {
    fun lastStoneWeight(stones: IntArray): Int {
        
        val pq = PriorityQueue<Int>(Collections.reverseOrder())
        
        stones.forEach {
            pq.add(it)
        }
        
        while(pq.size > 1) {
            val y = pq.poll()
            val x = pq.poll()
            if(y > x) {
                pq.add(y - x)
            }
        }

        return if(pq.isNotEmpty()) pq.poll() else 0
        
    }
}
profile
길을 찾는 개발자

0개의 댓글