package main import ( "strconv" ) func evalRPN(tokens []string) int { length := len(tokens) if length == 0 { return 0 } vals := make([]int, 0) for i := 0; i < length; i++ { switch tokens[i] { case "+": size := len(vals) a, b := vals[size-2], vals[size-1] vals = vals[:size-2] vals = append(vals, a+b) case "-": size := len(vals) a, b := vals[size-2], vals[size-1] vals = vals[:size-2] vals = append(vals, a-b) case "*": size := len(vals) a, b := vals[size-2], vals[size-1] vals = vals[:size-2] vals = append(vals, a*b) case "/": size := len(vals) a, b := vals[size-2], vals[size-1] vals = vals[:size-2] vals = append(vals, a/b) default: val, _ := strconv.Atoi(tokens[i]) vals = append(vals, val) } } return vals[0] } // func main() { // println(evalRPN([]string{ // The answer: 22 // "10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"})) // }