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)
T = 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 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.
학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.
'Develop > Python + SWEA' 카테고리의 다른 글
[SW Expert Academy] 4880. 토너먼트 카드게임 (0) | 2022.02.25 |
---|---|
[SW Expert Academy] 4875. 미로 (0) | 2022.02.25 |
[SW Expert Academy] 4871. 그래프 경로 (0) | 2022.02.23 |
[SW Expert Academy] 4869. 종이붙이기 (0) | 2022.02.22 |
[SW Expert Academy] 1234. 비밀번호 (0) | 2022.02.22 |