해당 문제는 아래와 같은 알고리즘으로 풀이했다.
- 입력받은 수식을 문자열로 저장하고, 문자 하나씩 탐색한다.
- 피연산자의 경우 해당 피연산자에 해당하는 값으로 변환하여 리스트에 순서대로 저장한다. (값으로 변환하기 위해 values 리스트를 사용하고, 해당 값들은 stack에 담긴다.)
- 만약 연산자를 만나는 경우, stack에서 두 값을 꺼내고 해당 연산자에 해당하는 연산을 수행한다.
코드는 다음과 같다.
import sys
input = sys.stdin.readline
n = int(input())
formula = input().rstrip()
values = list()
stack = list()
for i in range(n):
values.append(int(input()))
for i in formula:
if 'A' <= i and i <= 'Z':
stack.append(values[ord(i)-ord('A')])
else:
b = stack.pop()
a = stack.pop()
if i == '+': stack.append(a+b)
elif i == '-': stack.append(a-b)
elif i == '*': stack.append(a*b)
else: stack.append(a/b)
print("{:.2f}".format(stack.pop()))
'Algorithm > Data Structure' 카테고리의 다른 글
[백준] 17299: 오등큰수 (python 파이썬) (0) | 2024.04.28 |
---|---|
[백준] 17298: 오큰수 (python 파이썬) (0) | 2024.04.28 |
[백준] 10799: 쇠막대기 (python 파이썬) (2) | 2024.04.28 |
[백준] 17413: 단어 뒤집기 2 (python 파이썬) (0) | 2024.04.08 |
[백준] 10866: 덱 (python 파이썬) (2) | 2024.04.07 |