코딩테스트[파이썬]/알고리즘 문제풀이 입문

[스택 & 큐] - 후위식 연산

softmoca__ 2024. 2. 9. 17:05
목차

후위식 연산

 

 

후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 3*(5+2)-9 을 후위연산식으로 표현하면 352+*9- 로 표현되며 그 결과는 21입니다.

 

입력설명
첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다. 식은 1~9의 숫자와 +, -, *, /, (, ) 연산자로만 이루어진다.

출력설명
연산한 결과를 출력합니다.

 

입력예제 1

352+*9-

출력예제 1

12

 

 

 

 나의 코드

arr=input()
stack=[]

for x in arr:
    if x.isdecimal():
        stack.append(int(x))
    elif x =='+':
        stack.append(stack.pop() + stack.pop())
    elif x =='-':
        temp=stack[-2] - stack[-1]
        stack.pop()
        stack.pop()
        stack.append(temp)
    elif x =='*':
        stack.append(stack.pop() * stack.pop())
    elif x =='/':
        temp=stack[-2] / stack[-1]
        stack.pop()
        stack.pop()
        stack.append(temp)
print(stack[0])

후위 연산식에는 (,)가 없어 그저 사칙 연산 기호들을 분기처리하여 계산을 진행 

 

 

 

정답 코드

import sys
sys.stdin=open("input.txt", "r")
a=input()
stack=[]
for x in a:
    if x.isdecimal():
        stack.append(int(x))
    else:
        if x=='+':
            n1=stack.pop()
            n2=stack.pop()
            stack.append(n2+n1)
        elif x=='-':
            n1=stack.pop()
            n2=stack.pop()
            stack.append(n2-n1)
        elif x=='*':
            n1=stack.pop()
            n2=stack.pop()
            stack.append(n2*n1)
        elif x=='/':
            n1=stack.pop()
            n2=stack.pop()
            stack.append(n2/n1)
print(stack[0])

 나의 코드와 똑같다아 ~