Leetcode Java Last Stone Weight

업데이트:

문제

Link

코드

class Solution {

  public int lastStoneWeight(int[] stones) {
    Arrays.sort(stones);
    for (int i = stones.length - 1, j = i - 1; j >= 0;) {
      if (stones[j] == stones[i]) {
        stones[i] = 0;
        stones[j] = 0;
      } else if (stones[j] > stones[i]) {
        stones[j] = stones[j] - stones[i];
        stones[i] = 0;
      } else {
        stones[j] = stones[i] - stones[j];
        stones[i] = 0;
      }
      Arrays.sort(stones, 0, i);
      i--;
      j--;
    }
    return stones[0];
  }

}

결과

Link

설명

  1. 돌의 무게를 가진 stones를 이용하여 아래의 규칙을 만족하는 결과를 반환하는 문제이다.
    • 가장 무거운 두 돌의 돌맹이의 무게가 같으면 두 돌 모두 파괴된다.
    • 가장 무거운 두 돌의 돌맹이의 무게가 다르면 두 돌의 차이를 남긴다.
    • 마지막 남은 돌이 없으면 0을 반환한다.
  2. stones의 값들을 오름차순으로 정렬한다.

  3. i는 $stones.length - 1$로, j는 $i - 1$로 초기화하여 j가 0보다 클 때 까지 아래를 반복한다.
    • stones의 i번째 돌과 j번째 돌의 무게가 동일하면 0으로 둘 모두 0으로 바꾼다.
    • 위의 경우가 아니라 어느 한 쪽 돌의 무게가 크다면, 큰 돌의 자리에 두 돌의 차잇값을 넣어준다.
    • stones의 처음부터 j까지 돌들의 무게를 오름차순 정렬하고 i와 j를 감소한다.
  4. 수행이 완료되면 stones의 첫 값을 주어진 문제의 결과로 반환한다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기