Hikenny25

5일차 - Forth 본문

SW Expert Academy/Programming - Intermediate

5일차 - Forth

hikenny 2023. 12. 10. 09:57
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