Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 야구 게임

<시간/>

야구 경기 포인트 레코더가 있다고 가정합니다. 문자열 목록이 있습니다. 각 문자열은 다음 4가지 유형 중 하나일 수 있습니다. -

  • 정수(한 라운드의 점수) - 이번 라운드에서 얻은 점수를 나타냅니다.
  • "+"(한 라운드의 점수) - 이번 라운드에서 얻은 점수가 마지막 두 개의 유효한 라운드 점수의 합임을 나타냅니다.
  • "D"(한 라운드의 점수) - 이번 라운드에서 얻은 점수가 마지막 유효한 라운드의 점수를 두 배로 늘린 데이터임을 나타냅니다.
  • "C"(라운드 점수가 아닌 작업) - 마지막으로 얻은 유효한 라운드의 점수가 유효하지 않아 제거해야 함을 나타냅니다.

각 라운드의 작업은 영구적이며 라운드 이전과 이후에 영향을 미칠 수 있습니다. 모든 라운드에서 얻을 수 있는 점수의 합을 찾아야 합니다.

따라서 입력이 ["5","2","C","D","+"]와 같으면 출력은 30이 됩니다. 이것은 실제로

를 위한 것입니다.
  • 1라운드 - 5점을 얻을 수 있습니다. 합계는 5입니다.
  • 2라운드 - 2점을 얻을 수 있습니다. 합계는 7입니다.
  • 작업 1 - 라운드 2의 데이터가 잘못되었습니다. 합계는 5입니다.
  • 3라운드 - 10점을 얻을 수 있습니다. 합계:15.
  • 4라운드 − 5 + 10 =15점을 얻을 수 있습니다. 합계:30.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 스택 :=빈 목록
  • 작업의 각 i에 대해 다음을 수행합니다.
    • i가 "+"와 같으면
      • 첫 번째 :=스택[스택 크기 - 1], 두 번째 :=스택[스택 크기 - 2]
      • 마지막에 스택에 (첫 번째 + 두 번째) 삽입
    • 그렇지 않으면 i가 "D"와 같을 때
      • 마지막 스택에 (스택의 마지막 요소 * 2) 삽입
    • 그렇지 않으면 i가 "C"와 같을 때
      • 스택에서 마지막 요소 삭제
    • 그렇지 않으면
      • 마지막에 스택에 i 삽입
  • 스택의 모든 요소의 합계 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

class Solution:
   def calPoints(self, ops):
      stack = []
      for i in ops:
         if i == "+":
            first, second = stack[len(stack) - 1],
            stack[len(stack) - 2]
            stack.append(first + second)
         elif i == "D":
            stack.append(stack[-1] * 2)
         elif i == "C":
            stack.pop()
         else:
            stack.append(int(i))
      return sum(stack)
ob = Solution()
print(ob.calPoints(["5","2","C","D","+"]))

입력

["5","2","C","D","+"]

출력

30