후위식 연산(스택)

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

 

▣ 입력설명

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

 

▣ 출력설명

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

 

▣ 입력예제 1

352+*9-

 

▣ 출력예제 1

12


풀이

계산한 것을 다른 스택에 저장해줘야 하나 했는데 그대로 스택에 올려주면서 연산하면 되는거였다.


코드1

a = input()
stack = []
answer = 0

for x in a:
    if x.isdecimal():
        stack.append(int(x))
    else:
        if x=='+':
            answer = stack.pop()+stack.pop()
            stack.append(answer)
        elif x=='-':
            answer = stack.pop(-2)-stack.pop()
            stack.append(answer)
        elif x=='/':
            answer = stack.pop(-2)/stack.pop()
            stack.append(answer)
        elif x=='*':
            answer = stack.pop()*stack.pop()
            stack.append(answer)

print(int(stack.pop()))

 


코드2

a = input()
stack = []

for x in a:
    if x.isdecimal():              # 숫자이면 스택에 넣는다.
        stack.append(int(x))
    else:                          # 연산자이면 스택에서 숫자 2개 꺼낸 후 연산해서 다시 스택에 넣음 
        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)
        else:
            n1 = stack.pop()
            n2 = stack.pop()
            stack.append(n2 / n1)

print(stack[0])

 

 

'⏰ 코딩테스트 > 자료구조 활용' 카테고리의 다른 글

응급실(큐)  (0) 2021.10.21
공주 구하기(큐)  (0) 2021.10.20
후위표기식 만들기(스택)  (0) 2021.10.18
백준 알고리즘 - 10799 - 쇠막대기  (0) 2021.10.16
가장 큰 수(스택)  (0) 2021.10.14
복사했습니다!