https://leetcode.com/problems/baseball-game/description/
당신은 야구 경기를 관리하는 프로그램을 작성하려고 합니다. 야구 경기의 점수는 다음과 같이 계산됩니다:
- 유효한 점수: "정수", "+", "D", "C"로 이루어진 연산자입니다.
- "+" (정수 2개를 더해 새로운 점수 생성): 이전의 2개 점수를 더한 값을 추가합니다.
- "D" (이전 점수의 2배를 새로운 점수로 생성): 이전 점수의 2배 값을 추가합니다.
- "C" (최근 점수 삭제): 최근에 추가된 점수를 삭제합니다.
- 정수: 실제로 추가되는 점수입니다.
이 프로그램은 여러 라운드로 진행됩니다. 모든 입력은 유효한 점수 연산을 수행하도록 보장됩니다.
예시:
입력: ["5","2","C","D","+"]
출력: 30
설명:
- "5" - 최근 점수는 [5]
- "2" - 최근 점수는 [5, 2]
- "C" - 최근 점수 삭제, 최근 점수는 [5]
- "D" - 이전 점수의 2배 값 추가, 최근 점수는 [5, 10]
- "+" - 이전 2개의 점수를 더한 값 추가, 최근 점수는 [5, 10, 15]
최종 점수는 5 + 10 + 15 = 30 입니다.
참고:
- 입력 리스트의 길이는 1 이상 1000 이하입니다.
- 입력 리스트의 요소는 1 이상 100 이하인 정수입니다.
- 유효한 점수 연산이 최소한 하나는 포함되어 있습니다.


풀이
class Solution:
def calPoints(self, operations: List[str]) -> int:
stack = []
for op in operations:
if op == "+":
stack.append(stack[-1] + stack[-2])
elif op == "D":
stack.append(2 * stack[-1])
elif op == "C":
stack.pop()
else:
stack.append(int(op))
return sum(stack)
주어진 operations 리스트를 순회하며 각각의 연산
stack 이라는 리스트를 사용하여 각 연산의 결과를 저장하고, 마지막에 sum(stack)을 통해 모든 점수의 합을 계산하여 반환
- "+" 연산일 경우: 스택의 두 최근 값의 합을 새로운 값으로 스택에 추가
- "D" 연산일 경우: 스택의 가장 최근 값의 2배 값을 새로운 값으로 스택에 추가
- "C" 연산일 경우: 스택의 가장 최근 값 하나를 제거
- 정수일 경우: 해당 값을 정수로 변환하여 스택에 추가
'Algorithm > 릿코드' 카테고리의 다른 글
99클럽 코테 스터디 29일차 1337. The K Weakest Rows in a Matrix (0) | 2024.06.27 |
---|---|
99클럽 코테 스터디 28일차 2500. Delete Greatest Value in Each Row (0) | 2024.06.27 |
99클럽 코테 스터디 26일차 1475. Final Prices With a Special Discount in a Shop (0) | 2024.06.25 |
99클럽 코테 스터디 25일차 933. Number of Recent Calls 최근 요청의 수 (0) | 2024.06.24 |
99클럽 코테 스터디 24일차 1700. Number of Students Unable to Eat Lunch (0) | 2024.06.23 |