본문 바로가기
Develop/Python + SWEA

[SW Expert Academy] 4874. Forth

by Tarra 2022. 2. 25.

4874. Forth


문제)

 

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

3 4 + .
 

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

숫자는 스택에 넣는다.

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

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

 

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

다음은 Forth 연산의 예이다.

 

 

[입력]

첫 줄에 테스트 케이스 개수 T가 주어진다.  1≤T≤50
 
다음 줄부터 테스트 케이스의 별로 정수와 연산자가 256자 이내의 연산코드가 주어진다. 피연산자와 연산자는 여백으로 구분되어 있으며, 코드는 ‘.’로 끝난다.

나눗셈의 경우 항상 나누어 떨어진다.

 

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

 

 

 

 

풀이)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def Forth(li):
    stack = []
    operator = ["+""-""*""/"]
 
    for i in li:
        if i == ".":
            if len(stack) != 1:
                return ["error"]
            else:
                return stack
 
        elif i in operator:
            if len(stack) < 2:
                return ["error"]
            else:
                b = int(stack.pop())
                a = int(stack.pop())
                if i == "+":
                    c = a + b
                elif i == "-":
                    c = a - b
                elif i == "*":
                    c = a * b
                else:
                    c = a // b
                stack.append(c)
        else:
            stack.append(i)
 
 
= int(input())
for _ in range(T):
    li = list(map(str, input().split()))
    print(f"#{_ + 1}"*Forth(li))
cs

문제 출처 : https://swexpertacademy.com/main/main.do

 

SW Expert Academy

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

swexpertacademy.com

※ SW Expert 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.

학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.