Tiny Bunny
본문 바로가기
Algorithm/Python

[SWEA #11613] 스택2 - Forth

by nowag 2024. 2. 13.

문제

Forth라는 컴퓨터 언어는 스택 연산을 기반으로 하고 있어 후위 표기법을 사용한다. 예를 들어 3+4는 다음과 같이 표기한다.

3 4 + .

 

Forth에서는 동작은 다음과 같다.

숫자는 스택에 넣는다.

연산자를 만나면 스택의 숫자 두 개를 꺼내 더하고 결과를 다시 스택에 넣는다.

‘.’은 스택에서 숫자를 꺼내 출력한다.

 

Forth 코드의 연산 결과를 출력하는 프로그램을 만드시오. 만약 형식이 잘못되어 연산이 불가능한 경우 ‘error’를 출력한다.
 

다음은 Forth 연산의 예이다.

코드 출력
4 2 / . 2
4 3 - . 1

  

입력

첫 줄에 테스트 케이스 개수 T가 주어진다.  1T50

다음 줄부터 테스트 케이스의 별로 정수와 연산자가 256자 이내의 연산코드가 주어진다. 피연산자와 연산자는 여백으로 구분되어 있으며, 코드는 ‘.’로 끝난다.
나눗셈의 경우 항상 나누어 떨어진다.

 

출력 

#과 1번부터인 테스트케이스 번호, 빈칸에 이어 계산결과를 정수로 출력하거나 또는 ‘error’를 출력한다.

 

내가 쓴 코드

T = int(input())
for t in range(T):
    cal = list(input().split())   # 계산할 수식

    stack = []
    result = ''
    for c in cal:
        if c in '*/+-':
            if len(stack) <= 1:
                result = 'error'
                break
            else:
                a = int(stack.pop())
                b = int(stack.pop())
                if c == '*':
                    stack.append(b * a)
                elif c == '/':
                    stack.append(b / a)
                elif c == '+':
                    stack.append(b + a)
                elif c == '-':
                    stack.append(b - a)

        elif c == '.':
            result = int(stack.pop())
            if stack:
                result = 'error'
            break
        else:       # 숫자일때
            stack.append(c)

    print(f'#{t+1} {result}')

 

출력 결과

#1 84

#2 error

#3 168

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[BOJ #15649] N 과 M  (1) 2024.02.13
[SWEA #1222] 계산기1  (1) 2024.02.13
[SWEA #2005] 파스칼의 삼각형  (0) 2024.02.13
[BOJ #11727] 2xn 타일링 2  (1) 2024.02.13
[SWEA #12397] 스택1 - 종이 붙이기  (1) 2024.02.13