문제 링크 (opens new window)

# 문제 설명

  1. 숫자가 일의자리 숫자가 아닐 수 있음
  2. s + "+"를 순회함으로써 마지막 연산자까지 처리할 수 있음
  3. Character 타입의 wholeNumberValue로 숫자 얻어낼 수 있음
  4. 10을 곱해줘서 자릿수 계산까지 할 수 있음.
class Solution {
    func calculate(_ s: String) -> Int {
        var rhs = 0
        var op: Character = " "
        var operandStack: [Int] = []

        for char in s + "+" {
            if char == " " { continue }
            if char.isNumber {
                rhs = 10 * rhs + char.wholeNumberValue!
            } else {
                switch op {
                case "*":
                    let lhs = operandStack.removeLast()
                    operandStack.append(lhs * rhs)
                case "/":
                    let lhs = operandStack.removeLast()
                    operandStack.append(lhs / rhs)
                case "-":
                    operandStack.append(-rhs)
                default:
                    operandStack.append(rhs)
                }
                rhs = 0
                op = char
            }
        }
        var sum = 0
        while !operandStack.isEmpty {
            sum += operandStack.last!
            _ = operandStack.removeLast()
        }

        return sum
    }
}