백준 1935(Python) 풀이 : 후위 표기식 2



백준 1935 문제

백준 1935

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




백준 1935 풀이

요즘 후위 표기식을 배우고 있는데 신기한 것 같다. 왜 이런 걸 배우나 했는데, 컴퓨터가 계산하기 위한 표기 방법이 후위 표기법이었다.

후위 표기법은 어렵게 생각할 건 없다. 2단계만 기억하면 된다. 1단계는 우리가 일반적으로 사용하는 중위 표기법 ex. 5+3 를 53+ 로 바꾸는 것이다. 그리고 2단계는 후위 표기식 AB+를 스택을 사용해서 계산하는 것인데, 이 문제가 바로 2단계를 할 수 있냐를 물어보는 문제였다.

후위 표기식을 계산하는 것은 정말 간단하다. 피연산자(숫자 같은 것들, ex 5나 3)이 나오면 스택에 쌓아둔다. 그리고 연산자(+-*/)를 만나면 스택의 제일 끝에 있는 2개를 꺼내서 연산한 다음 다시 스택에 넣어두면 된다. (ex. 5+3 . => 8을 다시 스택에 넣음). 후위 표기식은 괄호도 어차피 없기 때문에 1단계 중위 표기식을 후위 표기식으로 변경하는 것보다 훨씬 쉽다.

아무튼 이렇게 후위 표기식을 계산하는 방식으로 문제를 풀면 다음과 같다.

# n : 피연산자 개수
n = int(input())

# word 피연산자
word = input()

# 숫자 딕셔너리
num_dict = dict()
for num in range(n):
    num_dict[chr(ord('A')+num)] = int(input())

### 후위 표기식 계산 ###
stack = list()
for w in word:
    # 연산자라면?
    if w in '+-*/':
        a = stack.pop()
        b = stack.pop()
        if w == '+':
            stack.append(b+a)
        elif w == '-':
            stack.append(b-a)
        elif w == '*':
            stack.append(b*a)
        else:
            stack.append(b/a)

    # 피연산자라면?
    else:
        # 숫자로 변경해서 스택에 넣기
        stack.append(num_dict[w])

# 출력. 소수점 2자리까지
ans = stack.pop()
print(f'{ans:.2f}')



알파벳에 숫자를 연결시키기 위해 딕셔너리를 활용하였고, 소수점 2자리까지 출력하기 위해 f포맷팅을 사용하여 출력하였다.

CATEGORIES:

Tags:

No Responses

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다