[SWEA] 계산기3
Date:
[SWEA] 계산기3
Problem URL : 계산기3
for tc in range(1, 11):
M = int(input())
s = list(str(input()))
stack = []
exp = []
isp = {'(': 0, '+': 1, '-': 1, '*': 2, '/': 2}
icp = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 3}
for i in range(M):
if s[i].isdigit():
exp.append(s[i])
else:
if s[i] == ')':
while stack[-1] != '(':
exp.append(stack.pop())
stack.pop()
else:
while stack and isp[stack[-1]] >= icp[s[i]]:
exp.append(stack.pop())
stack.append(s[i])
while stack:
exp.append(stack.pop())
for i in range(len(exp)):
if exp[i].isdigit():
stack.append(exp[i])
else:
b = int(stack.pop())
a = int(stack.pop())
if exp[i] == '+':
stack.append(a + b)
elif exp[i] == '-':
stack.append(a - b)
elif exp[i] == '*':
stack.append(a * b)
elif exp[i] == '/':
stack.append(a / b)
print('#{} {}'.format(tc, stack[0]))
Comments
isp 는 in-stack priority로 스택 안에 있을 때의 연산자 우선순위이고
icp 는 in-coming priority로 스택에 들어올 때 연산자 우선순위이다.
들어오는 연산자 입장에서 우선순위가 같거나 높은 것들은 먼저 계산되어야 하기에 후위 표현식(exp)에 들어가게 된다.
댓글