https://www.acmicpc.net/problem/1935
앞서 풀어본 후위 표기식의 발전된 버전이다. 후위 표기식을 해결하지 못한 채 마주쳤으면 조금은 까다로웠을 수도 있는데, 결론적으로 꽤나 쉬운 문항이었다. 가장 어려웠던 부분이 첫 부분 알파벳에 숫자를 대입하는 부분일 정도.
아스키코드로 알파벳 값들을 계산하는 풀이들이 주를 이루던데, 아스키코드를 공부해본 적이 없어 그냥 뚝심으로 밀고 갔다. 간단하게 알파벳 리스트를 불러오는 string의 ascii_upper/lowercase 정도는 소개해도 좋을 것 같다. (근데 막상 이를 사용하니 시간이 두배 이상 소요되더라....)
#PYTHON CODE (1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
from string import ascii_uppercase
n = int(input())
s = list(map(str, input()))
list1 = list(ascii_uppercase)
dic = {}
stk = []
def calcu(s,a,b):
if s == '*':
return a * b
elif s == '+':
return a + b
elif s == '/':
return b / a
else:
return b - a
for i in range(n):
dic[list1[i]] = int(input())
for i in s:
if i in list1:
stk.append(dic[i])
else:
a = stk.pop()
b = stk.pop()
stk.append(calcu(i, a, b))
print('{0:0.2f}'.format(stk[0]))
|
cs |
아 그리고 마지막 부분에 format함수, 역시 기본기가 탄탄해야하는데 까먹어버렸다. round함수를 생각한 것 까지는 좋았는데, 문제에는 적합하지 않더라.
특별한 코멘트는 필요 없을듯.
'백준 > 스택' 카테고리의 다른 글
[Python] 백준, 1725(스택) (0) | 2021.08.06 |
---|---|
[Python] 백준, 3986(스택) (0) | 2021.08.06 |
[Python] 백준, 9935(스택) (0) | 2021.08.02 |
[Python] 백준, 6549(스택) (0) | 2021.08.01 |
[Python] 백준, 1918(스택) (0) | 2021.07.29 |