BOJ/Python

백준 1918번 후위 표기식 파이썬

띵지니어 2022. 3. 12. 23:59

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

 

1918번: 후위 표기식

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

www.acmicpc.net

 

내 답안

import sys
input = sys.stdin.readline

tokens = input().rstrip()
result = []
op = []

priority = {'*': 2, '/': 2, '+': 1, '-': 1, '(': 0}

for i in tokens:
    if i.isalpha():
        result.append(i)
    elif i == '(':
        op.append(i)
    elif i == ')':
        while op[-1] != '(':
            result.append(op.pop())
        op.pop()
    else:
        #  i가 op[-1]의 우선순위와 같거나 보다 작으면
        #  i의 우선순위가 더 커질때까지 pop
        while op and priority[i] <= priority[op[-1]]:
            result.append(op.pop())
        op.append(i)

while len(op) != 0:
    result.append(op.pop())

print(''.join(result))

 

학교에선 C++로 후위 표기식을 공부했었다.

파이썬으로 코드를 짜보니 좀 더 깔끔한 느낌이 들었다.

연산자 우선순위는 딕셔너리를 통해 코드를 짰다.

priority = {'*': 2, '/': 2, '+': 1, '-': 1, '(': 0}