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
}
}