SWEA 1233. 사칙연산 유효성 검사(Python)

Wjong·2023년 1월 30일
0

swea

목록 보기
12/36
post-thumbnail


swea 1232, 사칙연산 문제에서 연산이 올바른지 확인하는 문제이다.
연산의 결과는 구할 필요가 없고, 연산이 올바르게 진행되는지(계산되는지) 확인하면 된다.
안되는 경우는 2가지가 있다

i) 상위노드가 연산자(+-*/)이고, 하위노드가 없을 때,
ii) 상위노드가 숫자이고 하위노드가 존재할 때,
두가지의 경우가 재귀중에 존재할 경우, "x"를 리턴함.
최종적인 결과로 "x"가 리턴될 경우, 0을 출력, 아닌경우 1을 출력

def calc(x):
    if x=="x":
        return "x"
    elif tree[x] in "+-*/":
        left_val=calc(left[x])
        right_val=calc(right[x])
        if left_val=="x" or right_val=="x":
            return "x"
        else:
            return 1
    else:
        if left[x] or right[x]:
            return "x"
        return tree[x]
res=[]
for m in range(10):
    tmp=""
    N=int(input())
    tree,left,right=[0]*(N+1),[0]*(N+1),[0]*(N+1)
    for _ in range(N):
        S=list(map(str,input().split()))
        tree[int(S[0])]=S[1]
        if len(S)>=4:
            left[int(S[0])]=int(S[2])
            right[int(S[0])]=int(S[3])
    tmp=0 if calc(1)=="x" else 1
    res.append(tmp)
for i in range(len(res)):
    print("#%d %s"%(i+1,res[i]))
profile
뉴비

0개의 댓글