[python] 백준 1935번

hyeo71·2023년 5월 27일
0

백준

목록 보기
11/24

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

문제


소스코드

import sys
from collections import deque


n = int(sys.stdin.readline())

notation = str(sys.stdin.readline().rstrip())

alphabet = {chr(x): 0 for x in range(ord("A"), ord("Z") + 1)}

for i in range(ord("A"), ord("A") + n):
    alphabet[chr(i)] = int(sys.stdin.readline())

stack = deque()
for i in range(len(notation)):
    if notation[i].isupper():
        stack.append(alphabet[notation[i]])
    else:
        back = stack.pop()  # 사칙연산 뒤에 오는 숫자
        front = stack.pop()  # 사칙연산 앞에 오는 숫자
        if notation[i] == "+":
            result = front + back
        elif notation[i] == "-":
            result = front - back
        elif notation[i] == "*":
            result = front * back
        else:
            result = front / back
        stack.append(result)

print("{:.2f}".format(result))


풀이

ord() : 문자를 인자로 받으면 해당 문자에 해당하는 유니코드 정수를 반환
chr() : 정수를 인자로 받으면 해당 정수에 해당하는 유니코드 문자를 반환

문자열.isupper() : 문자열이 대문자인지 확인하여 boolean 반환

value값 0을 가진 알파벳 dictionary를 선언하고 입력값을 해당 알파벳의 value로 저장한다.
대문자일 경우 스택에 저장하고 아닐 경우 스택에서 값을 추출하여 사칙연산에 맞는 값을 계산한뒤 스택에 저장한다.

0개의 댓글