알고리즘/백준

[백준 / Python] 1935번 후위 표기식2 | 초코더

cloud_nice 2020. 1. 30. 14:58

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

 

1935번: 후위 표기식2

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. (3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 정수이다)

www.acmicpc.net

나의 풀이

import sys
n=int(input())
str=input()
nums=[0]*n
for i in range(n):
    nums[i]=int(input())
stack=[]

for ch in str:
    #문자이면
    if ch.isupper():
        #nums[해당 문자의 아스키코드에 해당하는 index]
        stack.append(nums[ord(ch)-ord('A')])
    #연산자이면
    else:
        #뒤에 추가된 숫자먼저 빼오고
        #이전에 추가된 숫자빼오기
        num2=stack.pop()
        num1=stack.pop()
        if ch=='+':
            stack.append(num1+num2)
        elif ch=='-':
            stack.append(num1-num2)
        elif ch=='/':
            stack.append(num1/num2)
        elif ch=='*':
            stack.append(num1*num2)
#소수점 두자리까지 출력하는 방법
print(f"{stack[0]:.2f}")