본문 바로가기
알고리즘/[python] 백준 BOJ

[Python] 백준 1935 후위 표기식2

by Alan_Kim 2022. 12. 14.
728x90
반응형

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

 

1935번: 후위 표기식2

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이

www.acmicpc.net

 

문제 해결

- 후위 표기식에 대해 이해를 먼저 해야한다. ( ex) ABC*+DE/- => A(B*C)+DE/- => (A+(B*C))DE/- =>(A+(B*C))(D/E)- => (A+(B*C))-(D/E)

- A, B, C .. 알파벳에 숫자 대입을 어떻게 할 것인가? (ord(spell) 이용!)

- 무조건 소수 둘째자리까지 출력 print("{:.2f}".format(stack.pop()))

 

CODE

import sys
input = sys.stdin.readline

n = int(input())
cal = str(input().strip())
num_lst = [0]*n  # 피연산자값을 저장하기 위한

for i in range(n):
    num_lst[i] = int(input()) # 피연산자값을 저장하기 위한
stack =[]

for spell in cal:
    if 'A' <= spell <= 'Z':
        stack.append(num_lst[ord(spell)-ord('A')])
    else:
        y = stack.pop()
        x = stack.pop()
        if spell =='+':
            stack.append(x+y)
        elif spell =='-':
            stack.append(x-y)
        elif spell == '*':
            stack.append(x*y)
        elif spell =='/':
            stack.append(x/y)
print("{:.2f}".format(stack.pop()))
728x90
반응형

댓글