CodingTest/Baekjoon

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

JunJangE 2021. 9. 11. 19:23

문제

 

1935번: 후위 표기식2

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

www.acmicpc.net

알고리즘

- 입력받은 문자를 대문자인지 확인하여 연산자인지 피연산자인지 확인한다.

- 피연산자이면 아스키코드를 통해 숫자를 입력받는다.

- 연산자일 경우 스택에 맨 위에 있는 두 숫자를 팝하고 eval() 함수를 통해 연산해준다.

- 스택에 쌓인 하나의 숫자를 소수 둘째 자리까지 출력한다.

코드

import sys

n = int(sys.stdin.readline())
c = list(map(str, sys.stdin.readline().strip()))
num = [float(sys.stdin.readline()) for i in range(n)]

stack = []

for i in c:
    # 대문자인지 확인
    if i.isupper():

        # num 에 해당 문자의 아스키코드에 해당하는 index 를 스택에 추가
        stack.append(num[ord(i) - ord('A')])

    # 대문자가 아니라면 연산자를 통해 연산한다.
    else:
        # 스택에 맨 위에 두 숫자를 팝한다.
        a = stack.pop()
        b = stack.pop()

        # 팝한 두 숫자를 eval()함수를 통해 연산하고 다시 스택에 넣는다.
        stack.append(eval(str(b) + i + str(a)))

# 스텍에 쌓이 하나의 숫자를 소수 둘째 자리까지 출력한다.
print(format(stack[0], ".2f"))

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com