Skip to content

BOJ 백준 1935: 후위 표기식2

Updated: at 오후 10:00

Table of contents

Open Table of contents

들어가며

이 문제는 후위 표기식으로 표현된 문자열을 연산해서 그 결과값을 출력하는 문제입니다.
중위 표기식은 인간이 평소에 쓰는 수학식이고, 전위 표기식일 경우에는 계산 결과값 스택과 연산자 스택을 두고 계산 결과값 스택의 길이가 2이상될 때마다 트리거 시켜서 연산자 스택에서 연산자 하나 꺼내서 계산을 하면 됩니다.
후위 표기식도 똑같은 논리로 계산하면 됩니다.

풀이 과정

그냥 전위 표기식을 스택을 이용해서 계산하듯이, 똑같이 짜면 됩니다.

AC 받은 Python 코드

import sys

input = sys.stdin.readline


def is_alphabet(ch):
    if ch >= "A" and ch <= "Z":
        return True
    if ch >= "a" and ch <= "z":
        return True
    return False


if __name__ == "__main__":
    N = int(input().rstrip())
    post = input().rstrip()
    alphabet = {}
    operation = {
        "+": lambda x, y: x + y,
        "-": lambda x, y: x - y,
        "*": lambda x, y: x * y,
        "/": lambda x, y: x / y,
    }
    for i in range(N):
        alphabet[chr(ord("A") + i)] = int(input().rstrip())

    calcStack = []
    operatorStack = []
    for ch in post:

        if is_alphabet(ch):
            calcStack.append(alphabet[ch])
        else:
            operatorStack.append(ch)

        if len(calcStack) >= 2 and operatorStack:
            x, y = calcStack[-2], calcStack[-1]
            del calcStack[-2:]
            calcStack.append(operation[operatorStack.pop()](x, y))

    print(f"{calcStack[-1]:0.2f}")