반응형
문제설명
https://www.acmicpc.net/problem/1935
사고과정
- 피연산자 문자열을 숫자로 대응시킬 때 ord를 사용했어야 한다..
- 이번엔 피연산자를 스택에 넣고 연산자를 만날 때마다 스택에서 2개의 숫자를 pop해서 연산한 결과값을 다시 스택에 넣어준다.
- 단, 빼기, 나누기를 만났을 때는 먼저 pop해준 것을 뒤에놓고 두 번째 pop해준 것을 앞에 놓아야 한다. 예를 들어 stack = [1, 2] 가 있었을 때, 빼기, 나누기 연산을 만나게되면 (1 - 2) , (1 / 2)가 되야하기 때문에 먼저 pop한 것을 뒤에, 다음에 pop한 것을 앞에 놓고 계산해야 한다.
풀이(스스로 못 푼 풀이)
import sys
input = sys.stdin.readline
n = int(input().rstrip())
string = input().rstrip()
# 각 피연산자에 해당하는 숫자
nums = [0] * n
for i in range(n):
nums[i] = int(input().rstrip())
stack = [] # 피연산자에 대응하는 숫자 담을 스택
for s in string:
if s.isalpha():
stack.append(nums[ord(s)-ord('A')])
else:
# 연산자로 계산할 피연산자들 pop
n1 = stack.pop()
n2 = stack.pop()
if s == '*':
stack.append(n1*n2)
elif s == '+':
stack.append(n1+n2)
elif s == '/':
stack.append(n2/n1)
elif s == '-':
stack.append(n2-n1)
print(format(stack[-1], '.2f'))
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[BOJ] 10809번 - 알파벳 찾기 (0) | 2021.10.26 |
---|---|
[BOJ] 10808번 - 알파벳 개수 (0) | 2021.10.26 |
[BOJ] 1918번 - 후위 표기식 (0) | 2021.10.25 |
[BOJ] 17299번 - 오등큰수 (0) | 2021.10.25 |
[BOJ] 17298번 - 오큰수 (0) | 2021.10.25 |