본문 바로가기

Algorithm/Python

035 - 후위식 연산

후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 3*(5+2)-9 을 후위연산식으로 표현하면 352+*9- 로 표현되며 그 결과는 21입니다.

 

입력설명
첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다. 식은 1~9의 숫자와 +, -, *, /, (, ) 연산자로만 이루어진다.

 

출력설명
연산한 결과를 출력합니다.

 

입력예제 1

352+*9-

 

출력예제 1

12

 

 

몇번의 비효율적인 코드 테스트 샘플이 포함되어 있음, 마지막 예시 코드가 가장 효율적임.

 

#import sys
#sys.stdin = open('in.txt', 'rt')

a = input()
a = list(map(str, a))


# 배열을 나누었다가 붙였다가를 반복하는 더미코드.
# while True:
#     for i in range(len(a)):
#         if len(a) < 3:
#             break
#         if not a[i].isdecimal():
#             tmp1 = a[:i-2]
#             tmp2 = a[i+1:]
#             a1 = int(a[i-2])
#             a2 = int(a[i-1])
#             print('not decimal:', tmp1, a1, a2, a[i], tmp2)
#             if a[i] == '*':
#                 answer = a1 * a2
#             elif a[i] == '/':
#                 answer = a1 / a2
#             if a[i] == '+':
#                 answer = a1 + a2
#             if a[i] == '-':
#                 answer = a1 - a2
#             # print('type(answer):', type(answer))
#             a = []
#             a.extend(tmp1)
#             a.append(str(answer))
#             a.extend(tmp2)
#             print('step:', a)
#             break
#     if len(a) < 3:
#         break


# 기호를 까지 append/pop 해서 조금 비효율적인 샘플.
# tmp = []
# while a:
#     x = a.pop(0)
#     tmp.append(x)
#     if not tmp[-1].isdecimal():
#         type = tmp.pop()
#         c = int(tmp.pop())
#         b = int(tmp.pop())

#         if type == '*':
#             answer = b * c
#         elif type == '/':
#             answer = b / c
#         elif type == '+':
#             answer = b + c
#         elif type == '-':
#             answer = b - c
#         tmp.append(str(answer))
# print(tmp)


# append/pop 에서 기호는 제거하는 효율적인 코드
tmp = []
for x in a:
    if x.isdecimal():
        tmp.append(int(x))
    else:
        c = tmp.pop()
        b = tmp.pop()
        if x == '*':
            tmp.append(b * c)
        elif x == '/':
            tmp.append(b / c)
        elif x == '+':
            tmp.append(b + c)
        elif x == '-':
            tmp.append(b - c)
print(*tmp)

 

 

 

 

'Algorithm > Python' 카테고리의 다른 글

037 - 응급실(리스트, 큐 자료구조)  (0) 2023.08.22
036 - 공주 구하기(큐 자료구조로 해결)  (0) 2023.08.18
034 - 후위표기식 만들기  (0) 2023.08.16
033 - 쇠막대기  (0) 2023.08.16
032 - 가장 큰 수  (0) 2023.08.16