[Python][백준] 1935번 후위 표기식2

신남·2023년 1월 18일

https://www.acmicpc.net/problem/1935

공부 날짜 : 2023.01.18
정답 참조 여부 : X

후위표기식으로 제시된 연산을 연산해서 결과를 내는 문제이다.


스택구조를 이용해서 풀었다.

연산자가 나왔을 때 스택에서 2개의 수를 꺼내고, 2개의 수로 연산한 결과를 스택에 다시 추가해 줬다.

스택에는 알파벳 or 숫자가 들어있는데, My_num 함수를 이용해서 int나 float이면 그대로 반환하고
아니라면 자신의 숫자를 반환하도록 했다.

소스코드

import sys
input = sys.stdin.readline
###########################################
count_alpha = int(input())

order = input().rstrip()

num = []
for _ in range(count_alpha):
    num.append(int(input()))

###########################################
#입력받은 알파벳을 자신의 숫자로 반환하는 함수
def My_num(char):
    #이미 계산되어서 숫자가 들어있다면 숫자 반환
    if type(char) == int or type(char) == float:
        return char
    #아니라면 해당 알파벳의 숫자 반환
    else:
        index = ord(char) - ord('A')
        return num[index]

###########################################

stack = []
for i in range(len(order)):
    if order[i] == "+":
        num_2 = stack.pop(-1)
        num_1 = stack.pop(-1)
        stack.append(My_num(num_1) + My_num(num_2))

    elif order[i] == "-":
        num_2 = stack.pop(-1)
        num_1 = stack.pop(-1)
        stack.append(My_num(num_1) - My_num(num_2))

    elif order[i] == "*":
        num_2 = stack.pop(-1)
        num_1 = stack.pop(-1)
        stack.append(My_num(num_1) * My_num(num_2))

    elif order[i] == "/":
        num_2 = stack.pop(-1)
        num_1 = stack.pop(-1)
        stack.append(round(My_num(num_1) / My_num(num_2), 2))

    else:
        stack.append(order[i])

print(f"{stack[0]:.2f}")
   

0개의 댓글