# 문제상황
아래와 같이 후위표기식을 받을 때 피연산자를 알파벳 대문자로 받은 뒤, 그 후 각 알파벳 문자 자리에 치환 될 숫자를 입력받습니다. 저는 이 문제를 문자열의 'replace' 함수를 사용해서 알파벳과 숫자의 위치를 바꿔 풀려고 했었는데, 결론부터 말하면 그렇게 풀면 안 됩니다.
입력되는 숫자가 모두 1자리수 라는 보장만 있다면 문자열 replace 함수를 써도 풀리겠지만, 숫자가 2자릿수를 넘어가버리면 풀이가 꼬여버립니다. 나중에 후위표기식 문자열에서 실제 연산을 위해 값을 읽어올 때, 문자 1개만 가져와야할지 2개를 가져와야할지 알 수 없기 때문입니다. 그럼 어떻게 풀어야 할까요?
# 해결
입력받는 숫자들이 차례대로 'A, B, C...'에 대응된다는 점이 핵심입니다.
val = []
for _ in range(n):
val.append(int(input()))
1) 즉 입력받는 숫자들을 리스트 val 에 차례대로 저장한 뒤,
val[ord(ch) - ord('A')]
2) 후위표기식 문자열에서 문자를 읽어올 때 이 알파벳이 A라면 val[0]을 대응, B라면 val[1]을 대응시키면 됩니다.
더보기
※ 어떤 문자가 알파벳인지 알아내는 방법
if 'c'.isalpha():
파이썬에 내장되어 있는 함수 중 isalpha()가 있으니 활용해보세요!
# 답
n = int(input())
s = input()
stk = []
val = []
for _ in range(n):
val.append(int(input()))
for ch in s:
if ch.isalpha():
stk.append(val[ord(ch) - ord('A')])
else:
b = stk.pop()
a = stk.pop()
if ch == '+':
stk.append(a + b)
elif ch == '-':
stk.append(a - b)
elif ch == '*':
stk.append(a * b)
else:
stk.append(a / b)
print(f'{stk[0]:.2f}')
728x90
반응형
'Algorithm > BaekJoon' 카테고리의 다른 글
(파이썬) 백준 3085번 "사탕 게임" (0) | 2022.04.22 |
---|---|
(파이썬) 백준 2075번 "N번째 큰 수" (0) | 2022.04.22 |
(파이썬) 백준 1302번 "베스트셀러" (0) | 2022.04.21 |
(파이썬) 백준 11286번 "절댓값 힙" (0) | 2022.04.21 |
(파이썬) 백준 11729번 "하노이 탑 이동 순서" (0) | 2022.04.21 |