본문 바로가기

알고리즘/백준

[BOJ] [Python] 1935번 : 후위 표기식2

전형적인 스택 문제가 아닐까?

 

ABC*+DE/-을 예로 살펴보자.

앞에서부터 하나씩 값을 넣다가, 연산자가 들어오면 연산을 한다.

 

[1, 2, 3]

[1, 6]

[7]

[7, 4, 5]

[7, 0.8]

[6.2]

 

pop을 이용해서 2개의 원소를 뽑고,

push[append]를 이용해서 연산 결과를 넣어준다.

 

 

num = int(input())
string = input()

check = ["*", "+", "/", "-"]

dic = {}
li = []

for s in string:
    if s in check:
        first = li.pop()
        second = li.pop()

        if s == "+":
            li.append(second + first)

        elif s == "-":
            li.append(second - first)

        elif s == "*":
            li.append(second * first)

        elif s == "/":
            li.append(second / first)

    else:
        if s not in dic:
            dic[s] = int(input())

        li.append(dic[s])

print("%0.2f" % (li[0]))

 

 

 

*후위 표기식 : 연사자가 피연산자 뒤에 위치하는 방법

2 * 3 + 1 - 4 / 5을 후위 표기식으로 나타내면 1 2 3 *+ 4 5/- 이다.