swea 1222, 계산기1 문제에서 *연산이 추가되었다.
연산에 우선순위가 들어간다.
먼저 중위 -> 후위표기식으로 바꿔준다
후위표기식의 계산은 동일하다.
def priority(a):
if a=='*':
return 3
elif a=='+':
return 2
else:
return 1
res=[]
for m in range(10):
tmp=0
N=int(input())
stack=[]
post=[]
cal=[]
S=input()
for i in S:
if not stack and (i=='+' or i=='*'):
stack.append(i)
elif stack and (i=='+' or i=='*'):
while stack:
if priority(stack[-1])<priority(i):
break
else:
post+=stack.pop()
stack.append(i)
else:
post+=i
while stack:
post+=stack.pop()
for i in post:
if i not in '*+':
cal.append(int(i))
elif i=='+':
cal.append(cal.pop()+cal.pop())
elif i=='*':
cal.append(cal.pop()*cal.pop())
tmp=cal.pop()
res.append(tmp)
for i in range(len(res)):
print("#%d %s"%(i+1,res[i]))