"Boldness has genius, power, and magic in it." - Johann Wolfgang von Goethe

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