문제
Forth라는 컴퓨터 언어는 스택 연산을 기반으로 하고 있어 후위 표기법을 사용한다. 예를 들어 3+4는 다음과 같이 표기한다.
3 4 + .
Forth에서는 동작은 다음과 같다.
숫자는 스택에 넣는다.
연산자를 만나면 스택의 숫자 두 개를 꺼내 더하고 결과를 다시 스택에 넣는다.
‘.’은 스택에서 숫자를 꺼내 출력한다.
Forth 코드의 연산 결과를 출력하는 프로그램을 만드시오. 만약 형식이 잘못되어 연산이 불가능한 경우 ‘error’를 출력한다.
다음은 Forth 연산의 예이다.
| 코드 | 출력 |
| 4 2 / . | 2 |
| 4 3 - . | 1 |
입력
첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤50
다음 줄부터 테스트 케이스의 별로 정수와 연산자가 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 |