[알고리즘 문제 풀이][파이썬] 백준 1935번: 후위 표기식2

염지현·2022년 3월 21일
0

BOJ

목록 보기
11/22
post-custom-banner

백준 1935 문제 링크: https://www.acmicpc.net/problem/1935

📑 문제 설명

후위 표기식과 각 피연산자에 대응하는 값들이 주어졌을 때, 계산하는 프로그램 작성

입력: 피연산자의 개수, 후위표기식, 피연산자에 해당하는 값
출력: 후위표기식 연산 결과

💡 문제 해결 방법

  1. 피연산자가 나올 때는 stack에 push
  • 피연산자는 알파벳(A,B,C...)로 주어지기 때문에 각 알파벳에 해당하는 숫자를 알기 위해서 아스키 코드를 사용
  1. 연산자가 나올 때는 stack에서 마지막 두 개 숫자를 연산하여 다시 stack에 push

💻 코드

import sys

def postfix(n, post, num_list):
    stack = list()
    temp = 0
    result = 0
    for i in range(len(post) - 1):
        if (post[i] != '+' and post[i] != '-' and post[i] != '*' and post[i] != '/'):
            stack.append(num_list[ord(post[i]) - 65])
        elif (post[i] == '+'):
            cur = stack.pop()
            prev = stack.pop()
            stack.append(prev + cur)
        elif (post[i] == '-'):
            cur = stack.pop()
            prev = stack.pop()
            stack.append(prev - cur)
        elif (post[i] == '*'):
            cur = stack.pop()
            prev = stack.pop()
            stack.append(prev * cur)
        elif (post[i] == '/'):
            cur = stack.pop()
            prev = stack.pop()
            stack.append(prev / cur)

    return stack.pop()

if __name__ == '__main__':
    n = int(sys.stdin.readline())
    post = sys.stdin.readline()
    num_list = list()
    for i in range(n):
        num = int(sys.stdin.readline())
        num_list.append(num)
    answer = postfix(n, post, num_list)
    print("{:.2f}".format(answer))

💟 추가적으로 알게 된 점

post-custom-banner

0개의 댓글