SWEA

[SWEA] 4874 Forth - python

peach_h 2023. 2. 19. 00:45

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVIc7KqfQDFAWg 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

1. 숫자면 stack에 넣고

2. 연산자면 stack에서 숫자 2개 pop

3. 연산 후 다시 스택에 넣기

4. stack에 남은 수 출력

-> 이때 stack에 남은 수가 1인지 검사해야함!!!

이거 안해서 계속 틀렷음

T = int(input())
for test_case in range(1, T+1):
    op = {'*': 2, '/': 2, '+': 1, '-': 1}
    nums = list(input().split())
    stack = []
    ans = 0
    for n in nums:
        # 숫자면 stack에 추가
        if '0' <= n <= '9':
            stack.append(n)
        # 연산자일때
        elif n in op:
            # 스택이 있으면 숫자 하나 빼기
            if stack:
                a = int(stack.pop())
                # 스택이 있으면 숫자 하나 빼기
                if stack:
                    b = int(stack.pop())
                    # 연산자별로 연산해서 스택에 넣기
                    if n == '+':
                        stack.append(b+a)
                    elif n == '-':
                        stack.append(b-a)
                    elif n == '*':
                        stack.append(b*a)
                    else:
                        stack.append(b//a)
                # 스택에 아무것도 없는데 연산자가 들어오면 ans +1
                else:
                    ans += 1
            else:
                ans += 1
        # 숫자도 연산자도 아닌게 들어오면 pass
        else:
            pass
    # ans == 0 이고 stack의 수가 1이면
    if ans == 0 and len(stack) == 1:
        print(f'#{test_case} {stack[0]}')
    else:
        print(f'#{test_case} error')