DataStucture_1_07_후위표기식2(1935)

DataStucture1_07후위표기식2(1935)

문제

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

입력

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

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

출력

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

풀이

  • string 받고 dictionary 만들어서 숫자만 따로 저장.
  • dictionary에 없는 키값이면 저장 and '+ - / *' 가 아닌경우 저장
  • for문 string 길이만큼 돌려서 숫자면 append
  • 기호면 dictionary에서 key값으로 pop 두번씩 하여 연산

코드

import sys
sys.stdin = open("input.txt", "rt")

def input():
    return sys.stdin.readline().rstrip()

N = int(input())
calStr = input()
calOper = '+-/*'
arr = []
num = []
dict = {}


for i in range(N):
    num.append(int(input()))
num.reverse()
# 이렇게만 끝내면 안되고, deque와 딕셔너리를 이용해야 했다!!
for i in calStr:
    if i not in dict and i not in calOper:
        dict[i] = num.pop()
print(dict)

for i in range(len(calStr)):
    if calStr[i] == '+':
        tmp1 = arr.pop()
        tmp2 = arr.pop()
        arr.append(tmp2+tmp1)   

    elif calStr[i] == '-':
        tmp1 = arr.pop()
        tmp2 = arr.pop()
        arr.append(tmp2-tmp1)

    elif calStr[i] == '*': 
        tmp1 = arr.pop()
        tmp2 = arr.pop()
        arr.append(tmp2*tmp1)

    elif calStr[i] == '/':
        tmp1 = arr.pop()
        tmp2 = arr.pop()
        arr.append(tmp2 / tmp1)
    else:
        arr.append(dict[calStr[i]])
        # 딕셔너리 값은 이렇게 키값을 넣어 value를 찾는다.

res = float(arr[0])
print("%.2f"%res)

        

배운 것

딕셔너리

딕셔너리를 이용해야 한다는 점이다.

왜냐하면 예제 입력이

두번째 같은 경우에는 A 에 할당 값을 1로 줘야하므로,,,
딕셔너라 사용 방법은.
dic = {} 선언 후 for 문으로 dic[] = 값 을 주었다.
참고할 만한 링크는
https://www.infoking.site/70

후위 표기식

https://velog.io/@jin0106/Python-%ED%9B%84%EC%9C%84%ED%91%9C%EA%B8%B0%EB%B2%95-%EB%B0%8F-%EA%B3%84%EC%82%B0%EB%B2%95

서식 지정자

https://dojang.io/mod/page/view.php?id=2300

소숫점 표현하는 것 인터넷 챠보고 알았다 ㅎㅎ

코멘트

딕셔너리 잊지 마라요~~
후위 표기식 잊지 마라요!!
서식 지정자 왜 몰라요? 후,.,

좋은 웹페이지 즐겨찾기