문제
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()!
var x = stones.popLast()!
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
}
}