Algorithm/Data Structure

[백준] 1935: 후위 표기식2 (python 파이썬)

코딩마루 2024. 4. 29. 17:56

해당 문제는 아래와 같은 알고리즘으로 풀이했다.

  • 입력받은 수식을 문자열로 저장하고, 문자 하나씩 탐색한다.
  • 피연산자의 경우 해당 피연산자에 해당하는 값으로 변환하여 리스트에 순서대로 저장한다. (값으로 변환하기 위해 values 리스트를 사용하고, 해당 값들은 stack에 담긴다.)
  • 만약 연산자를 만나는 경우, stack에서 두 값을 꺼내고 해당 연산자에 해당하는 연산을 수행한다.

코드는 다음과 같다.

import sys

input = sys.stdin.readline

n = int(input())
formula = input().rstrip()
values = list()
stack = list()

for i in range(n):
    values.append(int(input()))

for i in formula:
    if 'A' <= i and i <= 'Z':
        stack.append(values[ord(i)-ord('A')])
    else:
        b = stack.pop()
        a = stack.pop()
        if i == '+': stack.append(a+b)
        elif i == '-': stack.append(a-b)
        elif i == '*': stack.append(a*b)
        else: stack.append(a/b)

print("{:.2f}".format(stack.pop()))