백준 문제 링크: https://www.acmicpc.net/problem/1935
문제 요약
후위 표기식이 주어질 때, 계산 결과를 소수점 2번째까지 출력
핵심 아이디어
알파벳이 주어지는데, 알파벳을 ord를 사용해 숫자로 바꾸는 것이 필요하다.
ord(x) - ord('A')를 할 경우 A가 오면 0이 된다.
알파벳이면 스택에 넣어주고, 연산자가 오면 스택에서 pop해주고 계산, 계산 결과를 다시 넣어주면 된다.
풀이
# silver3-1935. 후위 표기식2
import sys
input = sys.stdin.readline
n = int(input())
formula = list(input().rstrip())
nums = [int(input()) for _ in range(n)]
stack = []
for x in formula:
if x.isalpha():
stack.append(nums[ord(x) - ord('A')]) # A는 0번 인덱스
else:
second = stack.pop()
first = stack.pop()
if x == "+":
stack.append(first + second)
if x == "-":
stack.append(first - second)
if x == "*":
stack.append(first * second)
if x == "/":
stack.append(first / second)
print("%.2f" %stack[0])
Trouble Shooting
num_idx를 1씩 올려주며 다음 수를 보는 방식은 같은 알파벳이 여러 번 오는 경우 커버가 안 된다.
nums[ord(x) - ord('A')]를 사용해 알파벳을 인덱스화해줬다. (A는 0번 인덱스)
if x.isalpha():
stack.append(nums[num_idx])
num_idx += 1
실행 시간
메모리 31256KB, 시간 40ms (python3)
'ALGORITHM > 백준' 카테고리의 다른 글
[BOJ/PYTHON] 20301. 반전 요세푸스 (0) | 2023.06.01 |
---|---|
[BOJ/PYTHON] 1158. 요세푸스 문제 (0) | 2023.06.01 |
[BOJ/PYTHON] 9012. 괄호 (0) | 2023.06.01 |
[BOJ/PYTHON] 1026. 보물 (1) | 2023.05.25 |
[BOJ/PYTHON] 15889. 호 안에 수류탄이야!! (0) | 2023.05.25 |
댓글