daniel7481의 개발일지

[BOJ]1935 후위표기식2 본문

BOJ

[BOJ]1935 후위표기식2

daniel7481 2022. 7. 8. 16:18
반응형

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

 

1935번: 후위 표기식2

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

www.acmicpc.net

후위표기식을 풀었으니 후위 표기식2도 풀어보았다. 확실히 먼저 후위 표기식을 풀고 푸니까 훨씬 쉬웠다. 역으로 생각해서 이번에는 숫자들을 스택에 저장해준 후 연산자를 만나면 스택에서 두 번 pop해서 연산을 해주면 됬다. 근데 제출했더니 틀렸다고 나왔다.....놀란 마음에 뭐가 문제인지 생각을 해봤지만 아무리 봐도 틀린 것이 없었다. 결국에는 찾고 찾다가 소수점 2자리를 나타낼 때 나는 round를 썼고, 다른 사람들은 format함수를 썼다는 차이 밖에 없었다. 차이점은 출력할때 만약 6.00이면 round함수는 6을 출력하고, format함수는 6.00을 출력한다. 문제에서 예시 출력에 6.00이니, 할 말은 없기는 하다. 어쨌든 format함수를 써서 제출했더니 맞다고 나왔다.

import sys
input = lambda: sys.stdin.readline().rstrip()
n = int(input())
num_stack = []
expression = input()
dic = {}
for i  in range(65, 65+n):
    dic[chr(i)] = int(input())
for e in expression:
    if e.isalpha():
        num_stack.append(dic[e])
    else:
        x = num_stack.pop()
        y = num_stack.pop()
        exp = str(y)+e+str(x)
        num_stack.append(eval(exp))
print("{:.2f}".format(num_stack.pop()))
반응형

'BOJ' 카테고리의 다른 글

[프로그래머스]2020 KAKAO BLIND RECRUITMENT - 문자열 압축  (0) 2022.07.11
[BOJ] 2174 로봇 시뮬레이션  (0) 2022.07.08
[BOJ]1918 후위 표기식  (0) 2022.07.08
[BOJ]8972 미친 아두이노  (0) 2022.07.08
[BOJ]16967 배열 복원하기  (0) 2022.07.06