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]))