728x90
반응형
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
< 📝 문제 >
Forth라는 컴퓨터 언어는 스택 연산을 기반으로 하고 있어 후위 표기법을 사용한다. 예를 들어 3+4는 다음과 같이 표기
한다. 3 4 + .
Forth에서는 동작은 다음과 같다.
숫자는 스택에 넣는다.
연산자를 만나면 스택의 숫자 두 개를 꺼내 더하고 결과를 다시 스택에 넣는다.
‘.’은 스택에서 숫자를 꺼내 출력한다.
Forth 코드의 연산 결과를 출력하는 프로그램을 만드시오. 만약 형식이 잘못되어 연산이 불가능한 경우 ‘error’를 출력한
다.
다음은 Forth 연산의 예이다.
| 코드 | 출력 |
| 4 2 / . | 2 |
| 4 3 - . | 1 |
< ❓ 생각 >

< 💻 코드 >
def Forth(arr):
stack = []
for i in arr:
# 숫자면 스택에 넣기
if i not in '+-*/.':
stack.append(int(i))
# 연산자면 스택에 숫자 2개 꺼내 계싼하고 결과를 다시 스택에 넣기
elif i in '+-*/':
# 계산할 숫자가 있어야 함
if len(stack) >= 2:
if i == '+':
stack[-2] = stack[-2] + stack[-1]
elif i == '-':
stack[-2] = stack[-2] - stack[-1]
elif i == '*':
stack[-2] = stack[-2] * stack[-1]
elif i == '/':
# 나누는 수가 0이면 안됨
if stack[-1]:
stack[-2] = stack[-2] // stack[-1]
else:
return 'error'
stack.pop()
# 형식이 잘못된 경우 (계산할 숫자 없는데 연산자 나오는 경우)
else:
return 'error'
# '.'
elif i == '.':
# 계산이 끝난 경우
if len(stack) == 1:
return stack[0]
# 계산할 숫자가 남아있으면
else:
return 'error'
# 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
# 연산 코드
arr = list(input().split())
print(f'#{tc} {Forth(arr)}')
< ❗ 느낀 점 >
if문이 많이 쓰여 줄이고 싶었는데 실패...
728x90
반응형
'TIL (~2024) > Python 알고리즘' 카테고리의 다른 글
| [SWEA] 4871. 그래프 경로 - Python (0) | 2022.02.27 |
|---|---|
| [SWEA] 4875. 미로 - Python (0) | 2022.02.25 |
| [SWEA] 1225. 암호생성기 - Python (0) | 2022.02.25 |
| [SWEA] 3499. 퍼펙트 셔플 - Python (0) | 2022.02.24 |
| [SWEA] 11315. 오목 판정 - Python (0) | 2022.02.24 |
댓글