후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 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 |