문제

 

풀이 코드

import Foundation

let N = Int(readLine()!)!
let formula = readLine()!
var num = [Int]()
var answer = [Double]()

for _ in 0..<N {
    num.append(Int(readLine()!)!)
}

for op in formula {
    switch op {
    case "*":
        answer.append(answer.removeLast() * answer.removeLast())
    case "/":
        let stackLast = answer.removeLast()
        answer.append(answer.removeLast() / stackLast)
    case "+":
        answer.append(answer.removeLast() + answer.removeLast())
    case "-":
        let stackLast = answer.removeLast()
        answer.append(answer.removeLast() - stackLast)
    default:
        let idx = op.asciiValue! - 65
        answer.append(Double(num[Int(idx)]))
    }
}

print(String(format: "%.2f", answer.removeLast()))

 

풀이 과정

알파벳을 포함한 별도의 배열을 선언해 주고 계산을 해야하나 고민했는데,

Ascii 코드를 이용해서 인덱스를 할당하여 구현하면 된다고 생각했다.

 

A 의 아스키 코드는 65 이고, 입력받은 숫자들을 별도의 배열로 지정하여

A 일때는 0인덱스의 수를, B일때는 1인덱스의 수를 ... 이렇게 할당하면 될것같았다.

 

그렇게 그냥 스택을 이용해 풀이를 해주었고, 고려해야 할 점은 두가지였다.

- 와 / 인데,

 

덧셈과 곱셈의 경우 순서가 상관 없지만, 뺄셈과 나눗셈은 순서가 중요하기 때문에, 먼저 removeLast 를 수행하여 순서를 지정해 주었다.

 

이렇게 풀고 소숫점 2번째 자리까지만 출력하기 위해

String의 format 을 이용해 C언어의 printf 처럼 할당해 주었다

+ Recent posts