새소식

PS/백준

[백준/1935] 후위 표기식2 (Python)

  • -

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

 

1935번: 후위 표기식2

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

www.acmicpc.net

 

Difficulty : Silver 3

 

Status : Solved

 

Time : 00:07:02

 


 

문제 설명

 

더보기

후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오.

 

입력 및 출력

 

더보기

입력

 

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. 3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 100보다 작거나 같은 자연수이다.

후위 표기식을 앞에서부터 계산했을 때, 식의 결과와 중간 결과가 -20억보다 크거나 같고, 20억보다 작거나 같은 입력만 주어진다.

 

출력

 

계산 결과를 소숫점 둘째 자리까지 출력한다.

 

입력 예시

 

5
ABC*+DE/-
1
2
3
4
5

 

출력 예시

 

6.20

 

 


 

풀이

 

후위 표기식의 이해를 요구하는 문제. 기본적으로 스택 자료구조를 이용해 풀이할 수 있다.

  • 숫자 : 숫자가 들어왔다면 스택에 바로 push한다.
  • 연산자 : 연산자가 들어왔다면, 스택에서 두 수 a, b를 pop한다. (두 수의 순서에 주의하자) a, b의 연산자를 사용한 연산결과를 스택에 push한다.

숫자 대신 문자열이 들어오므로, 문자열과 매칭되는 숫자를 매핑할 수 있는 딕셔너리를 이용하면 편하다.

 

 

풀이 코드

N = int(input())
cal_list = input().strip()
cal_dict = dict()
stk = list()
for i in range(N) :
  cal_dict[chr(ord('A') + i)] = int(input())

for c in cal_list :
  if c in ['+', '-', '/', '*'] :
    b = stk.pop()
    a = stk.pop()
    if c == '+' :
      a += b
    elif c == '-' :
      a -= b
    elif c == '/' :
      a /= b
    else :
      a *= b
    stk.append(a)
  else :
    stk.append(cal_dict[c])

print('{:.02f}'.format(stk[0]))

풀이 완료!

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.