본문 바로가기
ALGORITHM/백준

[BOJ/PYTHON] 1935. 후위 표기식2

by 뭉망뭉 2023. 6. 1.

백준 문제 링크: 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

댓글