[LeetCode] Last Stone Weight

아르당·2026년 3월 27일

LeetCode

목록 보기
226/263
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

stones[i]가 i번째 돌의 무게를 나타내는 정수의 배열 stones가 주어진다.
돌을 가지고 게임을 한다. 매 차례에 가장 무거운 돌 두 개를 골라 서로 부딪친다. 가장 무거운 두 돌의 무게가 각각 x와 y이고 x <= y라고 가정한다. 이 부딪힘의 결과는 다음과 같다.

  • x == y이면, 돌 두 개가 부서진다.
  • x != y이면, 무게 x의 돌이 부서지고, 무게 y의 돌은 y - x의 무게가 된다.

게임이 끝나면, 최대 한 개의 돌만 남는다.
마지막에 남은 돌의 무게를 반환해라. 돌이 하나도 남지 않으면 0을 반환해라.

Example

#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

Constraints

  • 1 <= stones.length <= 30
  • 1 <= stones[i] <= 1000

Solved

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();
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글