SWEA
4874. [파이썬 S/W 문제해결 기본] 5일차 - Forth 코드분석
Toproot
2021. 3. 3. 17:36
728x90
728x90
🚛 파이썬 SW문제해결 기본 - Stack2
스택을 활용한 후입표기법 계산기 만들기 문제입니다.
후입표기법으로 주어진 문자열을 계산만 하면 되는 문제이기 때문에 크게 어렵지 않은 문제였습니다.
💡 아이디어
숫자와 문자열을 구분하는 isdigit, isalpha 메소드를 활용합니다.
전체적으로 숫자일때와 문자열일때를 구분하고 문자열안에서는
'.'를 기준으로 조건문으로 나눠주었습니다.
💻 파이썬 코드
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
T = int(input())
for tc in range(1, T+1):
lst = list(map(str, input().split()))
Stack = []
for i in range(len(lst)):
# 숫자일 경우..
if lst[i].isdigit():
Stack.append(lst[i])
else:
# 문자열일 경우..
# 마침표가 오면 먼저 확인..
if lst[i] == '.':
if len(Stack) == 1:
print('#{}'.format(tc),end=' ')
print(*Stack)
break
else:
print('#{}'.format(tc), end=' ')
print('error')
break
# 마침표가 아닐때 >> 계산..
if len(Stack) > 1:
num1, num2 = int(Stack.pop()), int(Stack.pop())
if lst[i] == '+': Stack.append(num2 + num1)
if lst[i] == '-': Stack.append(num2 - num1)
if lst[i] == '*': Stack.append(num2 * num1)
if lst[i] == '/': Stack.append(num2 // num1)
else:
# 스택에 문자가 1개이하일때 문자열이 오면 error
print('#{}'.format(tc), end=' ')
print('error')
break
* 제 코드가 정답은 아닙니다. 부족한 부분과 더 좋은 아이디어가 있으시면 댓글로 남겨주세요! :)
728x90
728x90