본문 바로가기

알고리즘 삽질장

[BOJ] 1935번 - 후위 표기식2

반응형


문제설명

https://www.acmicpc.net/problem/1935

 

1935번: 후위 표기식2

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이

www.acmicpc.net

사고과정

  • 피연산자 문자열을 숫자로 대응시킬 때 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