정구리의 우주정복
4874. [파이썬 S/W 문제해결 기본] 5일차 - Forth 본문
반응형
#파이썬으로 품
##분명 나보다 더 좋은 해결책이 있을거임
testCase = int(input())
for i in range(testCase):
stack = []
string = list(input().split())
top = 0
try:
if len(string)<2:
result ='error'
if string[0]=='+' or string[0] =='-' or string[0]=='/' or string[0]=='*' or string[0]=='.': #맨처음에 연산자 들어온 경우
result ='error'
else:
stack.append(string[0]) #연산자가 아니라면 1 append
for j in range(1,len(string)):
if string[j] =='+':#연산자가 들어온 경우
if len(stack) < 2:
result = 'error'
break
else:
sum = str(int(stack[top-1])+int(stack[top]))
stack.pop(top)
stack.pop(top-1)
top -= 1
stack.append(sum)
elif string[j] =='-':
if len(stack) < 2:
result = 'error'
break
else:
sum = str(int(stack[top-1])-int(stack[top]))
stack.pop(top)
stack.pop(top-1)
top -= 1
stack.append(sum)
elif string[j] =='*':
if len(stack) < 2:
result = 'error'
break
else:
sum = str(int(stack[top-1])*int(stack[top]))
stack.pop(top)
stack.pop(top-1)
top -= 1
stack.append(sum)
elif string[j] =='/':
if len(stack) < 2:
result = 'error'
break
else:
sum = str(int(stack[top-1])//int(stack[top]))
stack.pop(top)
stack.pop(top-1)
top -= 1
stack.append(sum)
elif string[j] =='.': #. 이 들어온 경우
if len(stack) > 1:
result ='error'
break
else:
result = stack[0]
else: #숫자가 들어온 경우
stack.append(string[j])
top += 1
print("#"+str(i+1)+" "+result)
except:
print('#'+str(i+1)+' error')
만약 eval() 을 쓸수 있었다면 좀 더 코드가 간결했겠지만 못써서 아주 길어졌다 하지만 어려운 코드는 아니니까 이해하기는 쉬울듯
!!중요한건 0에 대한 처리와 (ZeroDivisionError) '/' 를 입력하더라도 계산은 '//' 로 해줘야하는 !!
반응형
'ALGORITHM > SOLVE' 카테고리의 다른 글
[BOJ] 백준 2292번 - 벌집 파이썬 (0) | 2020.05.20 |
---|---|
[BOJ] 백준 2839번 - 설탕 배달 파이썬 (0) | 2020.05.19 |
4873. [파이썬 S/W 문제해결 기본] 4일차 - 반복문자 지우기 (0) | 2020.05.18 |
4871. [파이썬 S/W 문제해결 기본] 4일차 - 그래프 경로 (0) | 2020.05.17 |
4866. [파이썬 S/W 문제해결 기본] 4일차 - 괄호검사 (0) | 2020.05.17 |
Comments