https://leetcode.com/problems/baseball-game/
Baseball Game - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
풀이를 해봅시다.
일단, 이러한 문제이에요.
게임을 하는데, 이상한 룰이 있어요.
C,D,+와 같은 룰이죠.
이 게임에서는 과거가 미래까지 영향력을 많이 주어요!
C는 바로 이전 게임의 점수를 초기화 시켜요!!
D는 바로 이전 게임의 점수를 두배를 만들어 주고여. 아 여기서 제곱이 아니에요.
+는 이이전 수와 이전수를 더해요!!
그리고 그냥 Int는 점수로 쳐줘요!!
이렇게 해서,
아래와 같이 Switch 문으로 작성을 해보왔는데요!!
아직 타입을 확실히 이해하지 못한 것같아요!!
그래서 확실히 result를 [Int]로 확실히 찍고!!!!!!
append()를 해줍니다.
그런데... 여기서 큰 실수가 있죠?
뭐냐면, forEach 문의 장점은 간략하고 신속하게 문제를 해결할 수 있는 것이죠!!
근데, 아쉽게도 세세한 상황을 다루지는 못해요.
이런것이 설계 미스인것같아요!!
앞으로는 조금 다뤄야할 것이 많다면,
i 인덱스를 사용하는 것이 더 빠를 수도 있다는 것을 느껴요!
다른 고수님들의 풀이를 봐볼까요?
class Solution {
func calPoints(_ ops: [String]) -> Int {
var result:[Int] = []
ops.forEach{ op in
switch op{
case "C": result.removeLast()
case "D": result.append(result.first! * 2)
case "+": result.append(result.first! + result.last!)
default:
result.append(Int(op)!)
}
print(result)
}
return result.reduce(0,+)
}
}
이 부분을 잘하신것 같아요!!
인덱스 관리하는 부분을 잘하셨어요!!
[scoreArray.count - 2] + [scoreArray.count - 1]
그리고 마지막에 삼항 연산자로 연결해서 비워있을 수도 있으니깐?
isEmpty를 체크해서 비워있다면 0!!
이부분도 잘하신 것같아요.
다른 분들도 대부분 비슷하게 해서 이번에는 한개만 후기해요!
class solution {
var scoreArray = [Int]()
for i in 0..<ops.count {
if ops[i] == "C" {
scoreArray.removeLast()
} else if ops[i] == "D" {
scoreArray.append(scoreArray.last! * 2)
} else if ops[i] == "+" {
scoreArray.append(scoreArray[scoreArray.count - 2] + scoreArray[scoreArray.count - 1])
} else {
scoreArray.append(Int(ops[i])!)
}
}
return scoreArray.isEmpty ? 0 : scoreArray.reduce(0, +)
}
'Algorithm > Leetcode' 카테고리의 다른 글
Leetcode_Transpose Matrix (0) | 2022.06.30 |
---|---|
Leecode_Flipping an Image (0) | 2022.06.30 |
Leetcode_Robot-return-to-origin (0) | 2022.06.30 |
Leetcode_fizz-buzz (0) | 2022.06.30 |
Leetcode_Add digits (0) | 2022.06.30 |