Algorithm/릿코드

99클럽 코테 스터디 27일차 682. Baseball Game

Albosa2lol 2024. 6. 26. 07:28

https://leetcode.com/problems/baseball-game/description/

 

당신은 야구 경기를 관리하는 프로그램을 작성하려고 합니다. 야구 경기의 점수는 다음과 같이 계산됩니다:

  1. 유효한 점수: "정수", "+", "D", "C"로 이루어진 연산자입니다.
    • "+" (정수 2개를 더해 새로운 점수 생성): 이전의 2개 점수를 더한 값을 추가합니다.
    • "D" (이전 점수의 2배를 새로운 점수로 생성): 이전 점수의 2배 값을 추가합니다.
    • "C" (최근 점수 삭제): 최근에 추가된 점수를 삭제합니다.
  2. 정수: 실제로 추가되는 점수입니다.

이 프로그램은 여러 라운드로 진행됩니다. 모든 입력은 유효한 점수 연산을 수행하도록 보장됩니다.

예시:

입력: ["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" 연산일 경우: 스택의 가장 최근 값 하나를 제거
  • 정수일 경우: 해당 값을 정수로 변환하여 스택에 추가