


후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오.
첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. 3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 100보다 작거나 같은 자연수이다.
후위 표기식을 앞에서부터 계산했을 때, 식의 결과와 중간 결과가 -20억보다 크거나 같고, 20억보다 작거나 같은 입력만 주어진다.
계산 결과를 소숫점 둘째 자리까지 출력한다.
ex) 예제
a = ['A', 'B', 'C', '*', '+', 'D', 'E', '/', '-']
num = [1, 2, 3, 4, 5]
-> a = [1, 2, 3, '*', '+', 4, 5, '/', '-']
back = stack.pop()
front = stack.pop()
#front - back or front / backalph = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
n = int(input())
a = list(input())
num = [int(input()) for _ in range(n)]
stack = []
for i in range(len(a)):
if a[i] in alph:
a[i] = num[alph.index(a[i])] # 알파벳을 숫자로 변환
for word in a:
if type(word) is int:
stack.append(word)
else: # 연산자일 때
back = stack.pop() # 뒤에 오는 숫자 먼저 빼주기!
front = stack.pop()
if word == '+':
stack.append(front + back)
elif word == '-':
stack.append(front - back)
elif word == '*':
stack.append(front * back)
elif word == '/':
stack.append(front / back)
print(format(float(stack[0]), '.2f'))
후위 표기식의 원리를 잘 이해했다면 쉽게 풀릴 문제였다. 앞서 풀었던 stack 문제들과 많이 비슷했던 것 같다. 어떤 변수는 append, 다른 변수가 입력될 때 조건에 맞춰서 stack에서 pop.
소수 표현할 때 format 함수 기억하기!
format(float(stack[0]), '.2f')
https://www.acmicpc.net/problem/1935