[TIL] 백준 문제풀이

이지예·2022년 6월 25일
0

백준

목록 보기
16/20

백준 문제 풀이

1935 후위 표기식2

문제

후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오.

입력

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. 3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 100보다 작거나 같은 자연수이다.

후위 표기식을 앞에서부터 계산했을 때, 식의 결과와 중간 결과가 -20억보다 크거나 같고, 20억보다 작거나 같은 입력만 주어진다.

출력

계산 결과를 소숫점 둘째 자리까지 출력한다.

코드

n=int(input())
ex=list(map(str, input()))
num=[0 for _ in range(n)]
for i in range(n):
    num[i]=int(input())

num_list=[]
for j in ex:
    if 'A'<=j<='Z':
        num_list.append(num[ord(j)-ord('A')])
    else:
        num2=num_list.pop()
        num1=num_list.pop()
        if j=='*':
            num_list.append(num1*num2)
        elif j=='/':
            num_list.append(num1/num2)
        elif j=='+':
            num_list.append(num1+num2)
        else:
            num_list.append(num1-num2)

print('%.2f' %num_list[0])

풀이

이번 문제를 풀기 위해서는 우선 후위 표기식을 알아야 한다. 우리가 보통 쓰는 연산 방식은 중위표기법이다. 1+2와 같이 연산의 두 대상 사이에 연산 기호를 쓰는 방식이다. 이것을 12+와 같이 연산 기호를 뒤에 쓰는 방식을 후위 표기법이라고 한다. 후위 표기법으로 괄호 없이 식을 나타낼 수 있는데, (1+2)x(3+4)를 후위 표기법으로 나타내면 12+34+x가 된다. 숫자 뭉텅이와 연산자 뭉텅이가 쌍을 이룰때, 한 쌍에서 숫자는 뒤에서부터, 연산자는 앞에서부터 계산하게 된다.

코드의 설명은 이러하다.
입력을 받은 후, 후위 표기식의 요소로 for문을 돌린다. 만약 j가 피연산자라면 피연산자에 대응하는 값을 가지고 있는 리스트에서 피연산자에 대응하는 숫자를 num_list에 넣는다. j가 연산자라면 num_list에서 뒤에 있는 숫자를 2개 꺼내서 연산자에 해당하는 계산을 하고 다시 num_list에 넣어준다. 위 과정을 후위 표기식이 끝날 때까지 반복한다. num_list에 하나의 결과값이 남게 되고, 이 값을 소수점 둘째 자리까지 출력한다.

이번 문제는 후위 표기법을 이해하는데 시간이 걸렸다. 하지만 연산 방식을 이해하니 코드는 쉽게 작성할 수 있었다.

0개의 댓글