전형적인 스택 문제가 아닐까?
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/- 이다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] [Python] 14502번 : 연구소 (0) | 2021.08.26 |
---|---|
[BOJ] [Python] 2960번 : 에라토스테네스의 체 (0) | 2021.08.06 |
[BOJ] [Python] 1158번 : 요세푸스 문제 (1) | 2021.07.31 |
[BOJ] [Python] 7568번 : 덩치 (1) | 2021.07.27 |
[BOJ] [Python] 11047번 : 동전 0 (0) | 2021.07.27 |