package
0.0.0-20241101153438-fc0a12dbc586
Repository: https://github.com/guvanchhojamov/code-ship.git
Documentation: pkg.go.dev

# README

682. Baseball Game

Description

This problem involves keeping scores for a baseball game with a set of unique rules. Starting with an empty score record, you are provided with a list of string operations where each operation can be:

  • An integer x: Record a new score of x.
  • "+": Record a new score that is the sum of the previous two scores.
  • "D": Record a new score that is double the previous score.
  • "C": Invalidate and remove the previous score.

You need to return the sum of all the scores on the record after applying all the operations.

Examples

Example 1

Input: ops = ["5","2","C","D","+"] Output: 30 Explanation:

  • "5" - Add 5 to the record, record is now [5].
  • "2" - Add 2 to the record, record is now [5, 2].
  • "C" - Invalidate and remove the previous score, record is now [5].
  • "D" - Add 2 * 5 = 10 to the record, record is now [5, 10].
  • "+" - Add 5 + 10 = 15 to the record, record is now [5, 10, 15]. Total sum is 5 + 10 + 15 = 30.

Example 2

Input: ops = ["5","-2","4","C","D","9","+","+"] Output: 27 Explanation:

  • "5" - Add 5 to the record, record is now [5].
  • "-2" - Add -2 to the record, record is now [5, -2].
  • "4" - Add 4 to the record, record is now [5, -2, 4].
  • "C" - Invalidate and remove the previous score, record is now [5, -2].
  • "D" - Add 2 * -2 = -4 to the record, record is now [5, -2, -4].
  • "9" - Add 9 to the record, record is now [5, -2, -4, 9].
  • "+" - Add -4 + 9 = 5 to the record, record is now [5, -2, -4, 9, 5].
  • "+" - Add 9 + 5 = 14 to the record, record is now [5, -2, -4, 9, 5, 14]. Total sum is 5 + -2 + -4 + 9 + 5 + 14 = 27.

Example 3

Input: ops = ["1","C"] Output: 0 Explanation:

  • "1" - Add 1 to the record, record is now [1].
  • "C" - Invalidate and remove the previous score, record is now []. Total sum is 0.

Constraints

  • 1 <= operations.length <= 1000
  • operations[i] is "C", "D", "+", or a string representing an integer in the range [-3 * 10^4, 3 * 10^4].
  • For operation "+", there will always be at least two previous scores on the record.
  • For operations "C" and "D", there will always be at least one previous score on the record.

Topics

  • Array
  • Stack
  • Simulation

Companies

  • This problem has been used in interviews for numerous tech companies.

Solution

func calPoints(operations []string) int {
    var stack []int
    var result int
	
	for i := 0; i < len(operations); i++ {
        switch operations[i] {
        case "+":
            if len(stack) > 1 {
                result += stack[len(stack)-1] + stack[len(stack)-2]
                stack = append(stack, stack[len(stack)-1]+stack[len(stack)-2])
			}
        case "D":
            result += stack[len(stack)-1] * 2
            stack = append(stack, stack[len(stack)-1]*2)
        case "C":
            if len(stack) > 0 {
                result -= stack[len(stack)-1]
                stack = stack[0 : len(stack)-1]
            }
        default:
            val, _ := strconv.Atoi(operations[i])
            stack = append(stack, val)
            result += val
		}
    }
    return result
}