1935. 후위 표기식2

곽수경·2023년 10월 26일

1935. 후위 표기식 2

문제

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

입력

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. 3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 100보다 작거나 같은 자연수이다.

후위 표기식을 앞에서부터 계산했을 때, 식의 결과와 중간 결과가 -20억보다 크거나 같고, 20억보다 작거나 같은 입력만 주어진다.

출력

계산 결과를 소숫점 둘째 자리까지 출력한다.

풀이

1. 알파벳을 입력받은 숫자로 바꿔주는 함수와 문자열로된 연산자를 만나면 계산해주는 함수 구현
2. 리스트로된 스택 만들어두고 스택에 주어진 후위 표기식을 한 문자씩 넣어가면서 연산자를 만나면 계산하도록 구현
import sys

inputs = list(map(lambda x:x[:-1], sys.stdin.readlines()))

expression = inputs[1] 
numbers = inputs[2:]
stack = []


def alphabetToNum(char, nums):
	# 알파벳을 numbers의 숫자로 변환해주는 함수 
    return int(nums[ord(char)-65])

def calculate(a, b, char):
	# 문자열로된 연산자를 만나면 들어있던 피연산자를 꺼내고
    # 계산 후 결과를 반환하는 함수
    if (char == "+"): return a+b
    elif (char == "-"): return a-b
    elif (char == "*"): return a*b
    elif (char == "/"): return a/b

for char in expression:
    if (ord(char) >= 65): # 문자가 알파벳이면
        stack.append(alphabetToNum(char, numbers))
    else: 
        a = stack.pop()
        b = stack.pop()
        stack.append(calculate(b, a, char))

print(f"{stack[0]:.2f}")```
profile
공부 기록

0개의 댓글