본문 바로가기
공부/알고리즘

[알고리즘][백준] 1935번 후위 표기식2 - 파이썬(python) 풀이

by 무명오리 2024. 2. 25.

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

 

1935번: 후위 표기식2

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

www.acmicpc.net


 

스택에 [숫자, 숫자, 연산자]가 세트가 만들어지면 연산을 진행하는 형식으로 구현해보았다.

 

사실 후위표기식을 몰랐는데 정보처리기사 공부하면서 처음 알게돼서 아니었으면 못풀고 헤맸을듯..

 

내가 써본 코드

import sys

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

alpha = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
num = [0] * 26
stack = []
count = 0

input = sys.stdin.readline()

for i in range(n):
    num[i] = int(sys.stdin.readline().rstrip())

for a in input:
    if a in alpha:
        count += 1
        stack.append(num[alpha.index(a)])
    elif (count >= 2) and (a not in alpha):
        count -= 1
        mid = a
        right = stack.pop()
        left = stack.pop()

        if mid == "+":
            number = left + right
            stack.append(number)
        elif mid == "-":
            number = left - right
            stack.append(number)
        elif mid == "/":
            number = left / right
            stack.append(number)
        elif mid == "*":
            number = left * right
            stack.append(number)

print(*stack)

 

예제는 클리어하고 제출하니 틀렸다고 한다... 어째서지..?!

 

출력에 소숫점 둘째 자리까지 표시하라는 조건이 있었다.... 

아래와 같이 수정...

print(*stack) -------> print("{:.2f}".format(*stack))

 

다들 조건을 꼭 확인합시다...😂 

 

최종적인 코드!

import sys

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

alpha = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
num = [0] * 26
stack = []
count = 0

input = sys.stdin.readline()

for i in range(n):
    num[i] = int(sys.stdin.readline().rstrip())

for a in input:
    if a in alpha:
        count += 1
        stack.append(num[alpha.index(a)])

    elif (count >= 2) and (a not in alpha):
        count -= 1
        mid = a
        right = stack.pop()
        left = stack.pop()

        if mid == "+":
            number = left + right
            stack.append(number)
        elif mid == "-":
            number = left - right
            stack.append(number)
        elif mid == "/":
            number = left / right
            stack.append(number)
        elif mid == "*":
            number = left * right
            stack.append(number)

print("{:.2f}".format(*stack))