practivceAlgorithm/swexpertacademy

[SWEA][Python] 1223 계산기2

findTheValue 2021. 8. 24. 00:44

후위표기식 변형 및 연산

계산기 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