SWEA 1232. 사칙연산(Python)(D4)

Wjong·2023년 1월 30일
0

swea

목록 보기
11/36

말단부터 올라오면서 연산한다!
재귀함수로 1번노드부터 차례로 점점 내려간다
만약, x번 노드가 숫자일 경우, 그대로 return 하고
연산자일 경우 left, right 로 나눠 재귀로 들어간다.
이후, left, right를 연산자에 맞는 연산을 통해 return!

def calc(x):
    if tree[x] in "+-*/":
        left_val=calc(left[x])
        right_val=calc(right[x])
        if tree[x]=="+":
            return int(left_val)+int(right_val)
        elif tree[x]=="*":
            return int(left_val)*int(right_val)
        elif tree[x]=="-":
            return int(left_val)-int(right_val)
        else:
            return int(left_val)//int(right_val)
    else:
        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] # tree[x]= x정점의 값
        if len(S)>=4:
            left[int(S[0])]=int(S[2]) # left[x]= x정점의 왼쪽의 정점번호
            right[int(S[0])]=int(S[3]) # right[x] = x정점의 오른쪽의 정점번호
    tmp=calc(1)
    res.append(tmp)
for i in range(len(res)):
    print("#%d %s"%(i+1,res[i]))
profile
뉴비

0개의 댓글