Hikenny25
5일차 - Forth 본문
def is_operator(x):
if x == '+' or x == '-' or x == '*' or x == '/':
return True
else:
return False
def calculation(v1, v2, opt):
if opt == '+':
return v1 + v2
elif opt == '-':
return v2 - v1
elif opt == '*':
return v1 * v2
else:
return v2 / v1
t = int(input())
ans = list()
for _ in range(t):
data = list(input().split())
data.pop() # . 삭제
stack = list()
for i in data:
if not is_operator(i):
stack.append(int(i))
else:
if len(stack) < 2:
stack = ['error']
break
if is_operator(stack[-1]) or is_operator(stack[-2]):
stack = ['error']
break
v1 = stack.pop()
v2 = stack.pop()
stack.append(int(calculation(v1, v2, i)))
if len(stack) >= 2:
stack = ['error']
ans.append(stack[0])
for i in range(t):
print(f"#{i+1} {ans[i]}")
기본 동작원리는 문제에 나와있는 그대로 구현하면 된다.
문제는 error를 출력하는 조건을 구하는 것인데, 나는 ...
(1) stack의 길이가 2보다 작을 때 연산자가 들어왔을 때
(2) top과 top-1이 숫자가 아닐 때 (연산자 일 때)
(3) 모든 연산이 끝났지만 stack에 값이 두 개 이상일 때
세 가지 경우로 나눈 후 작성하엿따
'SW Expert Academy > Programming - Intermediate' 카테고리의 다른 글
1일차 - 최빈수 구하기 (0) | 2023.12.10 |
---|---|
5일차 - 미로 (0) | 2023.12.10 |
4일차 - 반복문자 지우기 (0) | 2023.12.09 |
4일차 - 그래프 경로 (0) | 2023.12.09 |
4일차 - 괄호검사 (0) | 2023.12.09 |
Comments