[LeetCode] [Swift] 1046. Last Stone Weight

doyeonjeong_·2022년 8월 11일
0

LeetCode

목록 보기
4/5
post-thumbnail
post-custom-banner

Hits

문제

1046. Last Stone Weight

문제파악하기

  • 마지막 돌이 남을 때까지 가장 큰 2가지 돌을 골라 상쇄시키는 연산이다.
  • 우선 배열을 정렬시킨 후 마지막 값을 popLast()로 하나씩 뽑는다.
  • 그리고 그 값이 같다면 그대로 다음 연산을 진행하면되고
  • 그 값이 다르다면 큰 쪽에서 작은쪽을 빼고 다시 배열에 추가시킨다.
  • 재귀로 해결하기 위해 맨 위에 값이 1개 남았을 때와 없을 때 이 2가지 예외처리를 해주면 된다.

풀이

class Solution {
    func lastStoneWeight(_ stones: [Int]) -> Int {
        if stones.count == 1 {
            return stones[0]
        } else if stones.count == 0 {
            return 0
        }
        var stones = stones.sorted()
        var y = stones.popLast()! // larger or same
        var x = stones.popLast()! // smaller of same
        if x < y {
            stones.append(y - x)
        }
        return lastStoneWeight(stones)
    }
}

🤔 FEEDBACK

  • 솔직히 .. LeetCode 75 Study Plan 마지막 문제라서 겁먹었다.
  • 특히 Heap (Priority Queue) 이 태그가 날 무섭게 만들었다.
  • 그래도 검색하기 전에 풀어나 보자고 문제 슥슥 읽고 구현했는데 풀렸다.
  • 뭐지🙄?

다른 풀이

class Solution {
    func lastStoneWeight(_ stones: [Int]) -> Int {
        var stones = stones

		// 예외처리
        if stones.count == 0 {
            return 0
        } else if stones.count == 1 {
            return stones[0]
        }
        
        stones.sort()
        while stones.count > 1 {
            let last = stones.removeLast()
            let secondLast = stones.removeLast()

            if last > secondLast {
                stones.append(last - secondLast)
            }
            
            stones.sort()
        }
        
        return stones.count > 0 ? stones[0] : 0
    }
}
profile
블로그 이사중 🚚 byukbyak.tistory.com
post-custom-banner

0개의 댓글