문제

문제를 보았을 때 이게 왜 야구 게임인지 ..? 싶었지만 풀어보도록 하자. 설명을 해석하자면 ["5", "2", "C", "D", "+"]이런 식으로 문자로 된 리스트가 들어오는데, 처음에는 기록이 비어있다. 리스트에 들어있는 요소에 따라 순서대로 연산을 수행하는데,
- 정수 x : 정수 x를 추가한다.
- + : 이전 두 점수의 합을 추가한다.
- D : 이전 점수의 2배를 추가한다.
- C : 이전 점수를 삭제한다.
위의 연산을 수행하고, 모든 점수의 합을 반환하는 함수를 정의하면 되는 문제이다.
풀이
모든 연산이 최근 점수를 기준으로 동작하기 때문에, LIFO 구조인 Stack을 사용하는 것이 적절하다고 생각했고, 새로운 res 라는 스택을 만들어서 점수를 저장하면서 연산을 이어나갔고, 마지막엔 저장된 스택의 모든 값을 더한 값인 sum을 반환하여 문제를 해결했다.
풀이 코드
class Solution:
def calPoints(self, operations: List[str]) -> int:
res = [] #결과를 저장하는 스택 초기화
for i in operations :
if i == "+" : #operation에 +가 있을때 :
res.append(res[-1] + res[-2])
elif i == "D" : #operations에 D(Double)이 있을 때 :
res.append(res[-1] * 2)
elif i == "C" :
res.pop() #stack에서 pop
else : #operation에 숫자일 때 :
stack.append(int(i))
return sum(res) #합 반환'Algorithm' 카테고리의 다른 글
| [LeetCode] 649 - Dota2 Senate (0) | 2026.03.03 |
|---|---|
| [LeetCode] 155 - Min Stack (0) | 2026.03.03 |
| [LeetCode] 141 - Linked List Cycle (0) | 2026.02.23 |
| [LeetCode] 387 - First Unique Character in a String (0) | 2026.02.23 |
| [LeetCode] 496 - Next Greater Element 1 (0) | 2026.02.23 |
