반응형
https://www.acmicpc.net/problem/1918
내 답안
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}
반응형
'BOJ > Python' 카테고리의 다른 글
백준 1935번 후위 표기식 2 파이썬 (0) | 2022.03.14 |
---|---|
백준 11866번 요세푸스 문제 0 파이썬 (0) | 2022.03.13 |
백준 2748번 피보나치 수 2 파이썬 (0) | 2022.03.11 |
백준 1977번 완전제곱수 파이썬 (0) | 2022.03.10 |
백준 2804번 크로스워드 만들기 파이썬 (0) | 2022.03.09 |