문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
stones[i]가 i번째 돌의 무게를 나타내는 정수의 배열 stones가 주어진다.
돌을 가지고 게임을 한다. 매 차례에 가장 무거운 돌 두 개를 골라 서로 부딪친다. 가장 무거운 두 돌의 무게가 각각 x와 y이고 x <= y라고 가정한다. 이 부딪힘의 결과는 다음과 같다.
게임이 끝나면, 최대 한 개의 돌만 남는다.
마지막에 남은 돌의 무게를 반환해라. 돌이 하나도 남지 않으면 0을 반환해라.
#1
Input: stones = [2, 7, 4, 1, 8, 1]
Output: 1
Explanation:
7과 8을 얻어 [2, 4, 1, 1, 1]이 된다.
2과 4을 얻어 [2, 1, 1, 1]이 된다.
2과 1을 얻어 [1, 1, 1]이 된다.
1과 1을 얻어 [1]이 되고, 마지막 돌의 값이 된다.
#2
Input: stones = [1]
Output: 1
class Solution {
public int lastStoneWeight(int[] stones) {
PriorityQueue<Integer> pQueue = new PriorityQueue<>((a, b) -> b - a);
for(int stone : stones){
pQueue.offer(stone);
}
while(pQueue.size() > 1){
pQueue.offer(pQueue.poll() - pQueue.poll());
}
return pQueue.poll();
}
}