[백준] 1935. 후위 표기식2

원숭2·2022년 2월 3일
0

백준

목록 보기
26/54

문제

풀이

  1. 알파벳으로 주어진 숫자를 바꿔주기 위해, for문과 dictionary를 활용함.
  2. 연산자가 아닌 문자를 만나면, stack에 집어넣어 줌.
  3. 연산자를 만나면, 2개의 수를 pop한 후, 연산의 결과를 다시 stack에 넣어줌.
    (뺄셈, 나눗셈의 경우 순서에 유의해야 함.)
  4. 연산이 끝날 때 까지 반복하고, 결과 값을 print함.

코드

def solution() :
    n = int(input())
    order = list(input())
    tmp = [int(input()) for _ in range(n)]
    num = dict()
    op = ['+', '-', '*', '/']
    stack = []
    
    idx = 0
    for i in range(len(order)) :
        if order[i] not in op :
            if order[i] not in num.keys() :
                num[order[i]] = tmp[idx]
                order[i] = tmp[idx]
                idx += 1
            else :
                order[i] = num[order[i]]
             
    for o in order :
        if o not in op :
            stack.append(o)
        else :
            if o == '+' :
                a = stack.pop()
                b = stack.pop()
                stack.append(a+b)
            elif o == '-' :
                a = stack.pop()
                b = stack.pop()
                stack.append(b-a)
            elif o == '*' :
                a = stack.pop()
                b = stack.pop()
                stack.append(a*b)
            else :
                a = stack.pop()
                b = stack.pop()
                stack.append(b/a)
    print(f'{stack[0] : >.2f}')
    
solution()

0개의 댓글