후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오.
첫째 줄에 피연산자의 개수(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://dojang.io/mod/page/view.php?id=2300
소숫점 표현하는 것 인터넷 챠보고 알았다 ㅎㅎ
딕셔너리 잊지 마라요~~
후위 표기식 잊지 마라요!!
서식 지정자 왜 몰라요? 후,.,