본문 바로가기

알고리즘/스택

파이썬 | 백준 | 1935 | 후위 표기식2 | 소수 둘째자리까지 출력

solution

1. 스택 이용 → 연산자면 pop() 두 번

2. print('%.2f' % n) : 소수 둘째 자리까지 출력

# 1395, 후위 표기식 2
import sys
from collections import deque


n = int(sys.stdin.readline())
ex = deque()
ex.extend(list(sys.stdin.readline().rstrip()))
num = []
for _ in range(n):
    num.append(int(sys.stdin.readline()))

tmp = []
res = 0
while ex:
    x = ex.popleft()
    if x == '+' or x == '-' or x == '*' or x == '/':
        a = tmp.pop()
        b = tmp.pop()

        if str(a).isalpha():
            a = num[ord(a)-ord('A')]
        if str(b).isalpha():
            b = num[ord(b)-ord('A')]

        if x == '+':
            res = b + a
        elif x == '-':
            res = b - a
        elif x == '*':
            res = b * a
        else:
            res = b / a

        tmp.append(res)

    else:
        tmp.append(x)

print('%.2f' % res)

31928KB

80ms


 

deque 사용 X

# 1395, 후위 표기식 2
import sys


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

tmp = []
res = 0

for x in ex:
    if 'A' <= x <= 'Z':
        tmp.append(num[ord(x)-ord('A')])
    else:
        a = tmp.pop()
        b = tmp.pop()

        if x == '+':
            res = b + a
        elif x == '-':
            res = b - a
        elif x == '*':
            res = b * a
        else:
            res = b / a

        tmp.append(res)


print('%.2f' % res)

29380KB

60ms

 

문제 출처 https://www.acmicpc.net/problem/1935

 

1935번: 후위 표기식2

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

www.acmicpc.net

 

'알고리즘 > 스택' 카테고리의 다른 글

자바 | 백준 | 1874 | 스택 수열 | intValue()  (0) 2021.02.11