Algorithm/BOJ

백준 1981 후위 표기식

삼쓰 웅쓰 2021. 4. 26. 23:46
728x90

출처: www.acmicpc.net/problem/1918

분류: 스택


접근방식

말 그대로 후위표기식 변환에 관한 문제였습니다.

설명은 따로 포스팅으로 대체하겠습니다 :)

 

해결방법

var str = readLine()!
var result = ""
var oper = ""

for char in str {
    if char == "(" {
        oper.append("(")
    } else if char == ")" {
        while let opr = oper.popLast() {
            guard opr != "(" else { break }
            result.append(opr)
        }
    } else if char == "*" || char == "/" {
        guard !oper.isEmpty else { oper.append(char); continue }
        
        while let opr = oper.last, (opr == "*" || opr == "/") {
            result.append(oper.popLast()!)
        }
        oper.append(char)
    } else if char == "+" || char == "-" {
        guard !oper.isEmpty else { oper.append(char); continue }
        while let opr = oper.popLast() {
            guard opr != "(" else { oper.append(opr); break }
            result.append(opr)
        }
        oper.append(char)
    } else {
        result.append(char)
    }
}

print(result + oper.reversed())

 

배운점