문제
import sys
from collections import deque
def input_priority(str):
if str == "(":
return 4
if str == "*" or str == "/":
return 3
elif str == "+" or str == "-":
return 2
elif str == "(":
return 1
return 0
def output_priority(str):
if str == "(":
return 0
if str == "*" or str == "/":
return 3
elif str == "+" or str == "-":
return 2
return 0
str_exp = sys.stdin.readline()[:-1]
computes = []
stack = deque()
for c in str_exp:
if c.isdecimal():
computes.append(c)
else:
if len(stack) == 0:
stack.append(c)
else:
if output_priority(stack[-1]) < input_priority(c):
stack.append(c)
else:
if c == ')':
while stack and stack[-1] != '(':
computes.append(stack.pop())
stack.pop()
else:
while stack and output_priority(stack[-1]) >= input_priority(c):
computes.append(stack.pop())
stack.append(c)
while stack:
computes.append(stack.pop())
print(computes)
for c in computes:
if c.isdecimal():
stack.append(c)
else:
n2 = int(stack.pop())
n1 = int(stack.pop())
if c == "+":
stack.append(n1 + n2)
elif c == "-":
stack.append(n1 - n2)
elif c == "*":
stack.append(n1 * n2)
elif c == "/":
stack.append(int(n1 / n2))
print(stack[0])
사칙연산만 있는 버젼
import sys
readl = sys.stdin.readline
def priority(c):
if c == "+" or c == "-":
return 1
if c == "*" or c == "/":
return 2
return 0
n = int(readl())
exp = readl().split()
post = []
stack = []
# 후위식 변환
for c in exp:
if c.isdecimal():
post.append(c)
else:
if len(stack) == 0:
stack.append(c)
else:
while stack and priority(stack[-1]) >= priority(c):
post.append(stack.pop())
stack.append(c)
while stack:
post.append(stack.pop())
# print(post)
# 후위식 계산
stack = []
for c in post:
if c.isdecimal():
stack.append(int(c))
else:
n2 = stack.pop()
n1 = stack.pop()
if c == "+":
stack.append(n1 + n2)
elif c == "-":
stack.append(n1 - n2)
elif c == "*":
stack.append(n1 * n2)
elif c == "/":
stack.append(n1
print(stack[-1])