후위식 연산(스택)
후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 3*(5+2)-9 을 후위연산식으로 표현하면 352+*9- 로 표현되며 그 결과는 21입니다.
▣ 입력설명
첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다.
식은 1~9의 숫자와 +, -, *, /, (, ) 연산자로만 이루어진다.
▣ 출력설명
연산한 결과를 출력합니다.
▣ 입력예제 1
352+*9-
▣ 출력예제 1
12
풀이
계산한 것을 다른 스택에 저장해줘야 하나 했는데 그대로 스택에 올려주면서 연산하면 되는거였다.
코드1
a = input()
stack = []
answer = 0
for x in a:
if x.isdecimal():
stack.append(int(x))
else:
if x=='+':
answer = stack.pop()+stack.pop()
stack.append(answer)
elif x=='-':
answer = stack.pop(-2)-stack.pop()
stack.append(answer)
elif x=='/':
answer = stack.pop(-2)/stack.pop()
stack.append(answer)
elif x=='*':
answer = stack.pop()*stack.pop()
stack.append(answer)
print(int(stack.pop()))
코드2
a = input()
stack = []
for x in a:
if x.isdecimal(): # 숫자이면 스택에 넣는다.
stack.append(int(x))
else: # 연산자이면 스택에서 숫자 2개 꺼낸 후 연산해서 다시 스택에 넣음
if x == "+":
n1 = stack.pop()
n2 = stack.pop()
stack.append(n2 + n1)
elif x == "-":
n1 = stack.pop()
n2 = stack.pop()
stack.append(n2 - n1)
elif x == "*":
n1 = stack.pop()
n2 = stack.pop()
stack.append(n2 * n1)
else:
n1 = stack.pop()
n2 = stack.pop()
stack.append(n2 / n1)
print(stack[0])
'⏰ 코딩테스트 > 자료구조 활용' 카테고리의 다른 글
응급실(큐) (0) | 2021.10.21 |
---|---|
공주 구하기(큐) (0) | 2021.10.20 |
후위표기식 만들기(스택) (0) | 2021.10.18 |
백준 알고리즘 - 10799 - 쇠막대기 (0) | 2021.10.16 |
가장 큰 수(스택) (0) | 2021.10.14 |