https://www.acmicpc.net/problem/1935
import sys
N = int(sys.stdin.readline())
expr = sys.stdin.readline().rstrip()
operand = []
for i in range(N):
operand.append(int(sys.stdin.readline()))
stack = []
for e in expr:
if e >= 'A' and e <= 'Z':
stack.append(operand[ord(e) - ord('A')])
else:
if e == "+":
stack.append(stack.pop(-2) + stack.pop())
elif e == "-":
stack.append(stack.pop(-2) - stack.pop())
elif e == "*":
stack.append(stack.pop(-2) * stack.pop())
elif e == "/":
stack.append(stack.pop(-2) / stack.pop())
print("%.2f" % stack[0])
피연산자는 무조건 A, B, C, ..와 같이 알파벳 순서로 주어진다! 따라서 ord(e) - ord('A')를 통해 주어진 몇 번째 operand인지 알 수 있다.
후위 표기식은 operator가 나왔을 때, 무조건 뒤에서 두 번째 operand가 첫 번째 인자가 되고 뒤에서 첫 번째 operand가 두 번째 인자가 된다. 따라서 operand가 저장된 stack에서 pop() 메서드를 쓸 때 첫 번째 인자는 pop(-2)를 통해 가져와야 한다.
소수점 2자리까지 출력해야 하므로, print("%.2f" % stack[0])과 같은 포맷을 이용해야 한다.
생각보다 오래 고민했는데 쉽게 풀지 못했다.
기본 수준에선 고민하는 것만큼 다양한 문제를 접하면서 익숙해지는 것도 중요한 것 같다.