파이썬 알고리즘-35 (스택) 후위식 연산

jiffydev·2020년 9월 7일
0

Algorithm

목록 보기
38/92
post-thumbnail

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

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

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

▣ 입력예제 1
352+*9-

▣ 출력예제 1
12

내 코드

lst=input()
stk=[]
res=''
for i in lst:
    if i.isdecimal():
        stk.append(i)
    else:
        res=eval(stk.pop(-2)+i+stk.pop())
        stk.append(str(res))
print(res)

풀이와는 약간 다르게 풀었다.

풀이

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])

반성점

  • 스택을 제대로 사용하려면 stk.pop(-2)는 사용하면 안되는데 왼쪽부터 계산하도록 하는 법을 몰랐다.

배운 것

  • 얼마 전에 배운 eval() 함수를 사용해 봤다. 문자열로 된 수식을 계산해주는 함수인데 이번 문제와 같이 괄호 없이 그때 그때 계산하는 경우라면 사용해도 될 듯.
  • 제대로 스택을 사용해 풀려면 n1, n2에 pop해서 식의 순서를 n2(+,-,*,/)n1 한다.
profile
잘 & 열심히 살고싶다

0개의 댓글