본문 바로가기

PS/백준

[BOJ] 백준 1935 후위 표기식2 (Swift)

반응형

문제

https://www.acmicpc.net/problem/1935

 

1935번: 후위 표기식2

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이

www.acmicpc.net

풀이

스택을 사용하여 풀 수 있는 문제
먼저, 이 문제를 풀려면 후위 표기식을 계산하는 방법에 대해 알아야 한다.

  • 후위표기식을 계산하는 방법
    • 숫자가 들어오면 스택에 넣어줌
    • 연산자가 들어오면 스택에서 2개의 숫자를 뽑고 연산 처리
    • 다시 스택에 넣음
    • 마지막 스택에 남은 수가 계산된 결과

뺄셈과 나눗셈을 순서에 주의하여 풀이하면 쉽게 풀 수 있는 문제

소스코드

import Foundation
enum OperType: Character {
case plus = "+"
case minus = "-"
case multiply = "*"
case divisor = "/"
func calculate(_ n1: Double, _ n2: Double) -> Double {
switch self {
case .plus: return n1 + n2
case .minus: return n2 - n1
case .multiply: return n1 * n2
case .divisor: return n2 / n1
}
}
}
let n = Int(readLine()!)!
let command = readLine()!
var dict: [Character: Double] = [:]
var numStack: [Double] = []
for i in 0..<n {
dict[Character(UnicodeScalar(i + 65)!)] = Double(readLine()!)!
}
for cmd in command {
if let oper = OperType(rawValue: cmd) {
numStack.append(oper.calculate(numStack.removeLast(), numStack.removeLast()))
} else {
numStack.append(dict[cmd, default: 0])
}
}
print(String(format: "%.2f", numStack.last!))

후기

스택 자료구조의 기본적인 문제이며 후위 표기식 계산 방법에 대해 알아야함

반응형