후위표기식 변형 및 연산
계산기 2지만 사실 3도 풀리게 짰다.
아직 isp, icp 손에 잘 안익음/../
def calculate(post_ex):
n = len(post_ex)
stack = []
for i in range(n):
# 숫자면 stack
if post_ex[i].isdigit():
stack.append(post_ex[i])
else:
# 곱하기 나오면 두개빼서 곱하고 다시 넣음
if post_ex[i] == '*':
stack.append(int(stack.pop()) * int(stack.pop()))
# 더하기 나오면 두개 빼서 더하고 다시 넣음
elif post_ex[i] == '+':
stack.append(int(stack.pop()) + int(stack.pop()))
else:
stack.pop()
return stack[0]
def make_post(expression):
isp = {'+': 1, '-': 1, '*': 2, '/': 2, ')': 0, '(': 0}
icp = {'+': 1, '-': 1, '*': 2, '/': 2, ')': 0, '(': 3}
stack = []
ans = ""
for s in expression:
if s.isdigit():
ans += s
elif s == ')':
while stack and stack[-1] != '(':
ans += stack.pop()
stack.pop()
else:
while stack and icp[s] <= isp[stack[-1]]:
ans += stack.pop()
stack.append(s)
while stack:
ans += stack.pop()
return ans
for test in range(1, 11):
n = int(input())
print(f'#{test} {calculate(make_post(input()))}')
'practivceAlgorithm > swexpertacademy' 카테고리의 다른 글
[SWEA][Python] 1226 미로1 (0) | 2021.08.25 |
---|---|
[SWEA][Python] 1225 암호생성기 (0) | 2021.08.25 |
[SWEA][Python] 5178 노드의 합 (0) | 2021.08.24 |
[SWEA][Python] 5177 이진힙 (0) | 2021.08.24 |
[SWEA][Python] 5176 이진 탐색 (0) | 2021.08.24 |