Koala - 4기

[BOJ 1918번] : 후위 표기식

Chamming2 2021. 7. 24. 19:56

문제 링크

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식

www.acmicpc.net

연산자 우선순위와 괄호를 고려하는 부분이 많이 까다로웠던 문제입니다. 😂

import sys
input = sys.stdin.readline

operators = {"/": 2, "*": 2, "+": 1, "-": 1, "(": 0}
stack = []
foluma = input()

for s in foluma:
    if s == "\n":
        continue
    if s.isalpha():
        print(s, end="")
    elif s == "(":
        stack.append(s)
    elif s == ")":
        while True:
            temp = stack.pop()
            if temp == "(":
                break
            print(temp, end="")
    else:
        # 스택의 가장 위에 있는 연산자가 현재 만난 연산자보다 우선순위가 높다면
        # Ex. 스택에는 * 있고 현재 +을 만났다면 스택에 있는걸 먼저 수행함
        # Ex. 스택에는 + 있고 현재 *을 만났다면 그냥 스택에 더하기만 할것 => 이래야 우선순위 높은 순서대로 실행되므로
        while stack and operators[stack[-1]] >= operators[s]:
            print(stack.pop(), end="")
        stack.append(s)

while stack:
    print(stack.pop(), end="")