import sys
N = int(sys.stdin.readline())
input = list(sys.stdin.readline().rstrip())
num = []
for i in range(N):
num.append(int(sys.stdin.readline().rstrip()))
stack = []
for i in input:
if i.isalpha():
stack.append(num[ord(i) - ord('A')])
else:
a = stack.pop()
result = stack.pop()
if i == '+':
result += a
elif i == '-':
result -= a
elif i == '*':
result *= a
elif i == '/':
result /= a
stack.append(result)
print('%.2f' %stack[-1])
우리가 보통 아는 계산식은 숫자와 숫자 사이에 연산자가 나오는데 ('1+2' 이런식)
이 문제는 이름이 후위 표기식인 것처럼 숫자 두개가 먼저 나오고 연산자가 뒤에 나온다고 생각하면 된다. ('12+' 이런식)
나는 입력을 한번에 하고 싶었기 때문에 '단어 뒤집기2'에서 사용했었던 rstrip()을 사용했다. 한번에 입력하기 위해 입력을 할때 '\n(엔터)'가 포함되어 있는 문자열(?)을 복사해서 붙여넣기 한다.
이렇게 하게 되면 리스트에 저장될때 '\n(엔터)'까지 포함되어 리스트에 저장된다! 따라서 input을 입력받을때 rstrip()라는 것을 사용해서 '\n(엔터)'는 리스트에 저장되지 않게 제외시켜주는 것이다.
import sys
N = int(sys.stdin.readline())
input = list(sys.stdin.readline().rstrip())
num = []
for i in range(N):
num.append(int(sys.stdin.readline().rstrip()))
stack = []
for i in input:
if i.isalpha(): # 알파벳을 만났을때
stack.append(num[ord(i) - ord('A')]) # 알파벳에 대응하는 숫자를 stack 리스트에 저장한다.
else: # 연산자를 만났을때
# 연산자 앞에 숫자 두개를 pop해줌
a = stack.pop()
result = stack.pop()
# 해당하는 연산자로 계산
if i == '+':
result += a
elif i == '-':
result -= a
elif i == '*':
result *= a
elif i == '/':
result /= a
# 결과값을 스택에 저장
stack.append(result)
# 소숫점 둘째 자리까지 출력하기 위해 '%.2f' 사용
# 리스트의 맨 마지막 요소를 가져오기 위해 [-1] 사용
print('%.2f' %stack[-1])
간단한듯 조금은 복잡했던 문제였던 것 같다.