중위표기식을 후위표기식으로 바꿔주는 문제이다.
먼저 연산자를 담을 opStack이 필요하다.
알파벳은 그대로 출력하고,
연산자인 경우 opStack안의 연산자와 우선순위를 비교하여
자신보다 opStack의 제일 윗 연산자가 우선순위가 높다면,
opStack에 removeLast()하거나 opStack에 연산자를 append한다.
opStack.removeLast() : opStack의 제일 윗 원소를 pop하고 그 값을 출력한다.
import Foundation
let line = readLine()!
var opStack = ""
for char in line {
if char == "(" {
opStack.append(char)
} else if char == ")" {
while !opStack.isEmpty && opStack.last != "(" {
print(opStack.removeLast(),terminator: "")
}
opStack.removeLast()
} else if (char == "*" || char == "/") {
while !opStack.isEmpty && (opStack.last == "*" || opStack.last == "/") {
print(opStack.removeLast(),terminator: "")
}
opStack.append(char)
} else if (char == "+" || char == "-") {
while !opStack.isEmpty && opStack.last != "(" {
print(opStack.removeLast(),terminator: "")
}
opStack.append(char)
} else {
print(char,terminator: "")
}
}
while !opStack.isEmpty {
print(opStack.removeLast(),terminator: "")
}