티스토리 뷰

알고리즘/SWEA

[SWEA] 1232. 사칙연산

빙빙 2021. 4. 11. 14:33
oper = ['+','-','*','/']
def cal(node): #후위순회
    global result

    if not tree[node][0] in oper: #부모노드가 숫자이면
        return tree[node][0]
    else: #부모노드가 연산자이면
        left = cal(tree[node][1])
        right = cal(tree[node][2])

        if tree[node][0] == '+':
            result = left + right
        elif tree[node][0] == '-':
            result = left - right
        elif tree[node][0] == '*':
            result = left * right
        elif tree[node][0] == '/':
            result = left // right

        return result





T = 10
for tc in range(1, T+1):
    N = int(input())
    # [데이터(수|연산자),왼쪽 자식노드번호, 오른쪽 자식노드번호]
    tree = [[[] for _ in range(3)] for _ in range(N + 1)] #인덱스 1번부터 N번까지 사용하기 위함
    for i in range(N):
        # 1 - 2 3 / 5 65
        node_info = input().split()
        node_num = int(node_info[0])
        node_data = node_info[1]
        #트리에 데이터 넣어주기
        if node_data not in oper: #숫자면 숫자 넣어주기
            tree[node_num][0] = int(node_data)
        else: #연산자이면 데이터 넣어주기
            tree[node_num][0] = node_data

        if len(node_info) == 4:#사칙연산이므로 자식이 둘다 있을 때 넣어준다.
            tree[node_num][1] = int(node_info[2])
            tree[node_num][2] = int(node_info[3])

    # print(tree)
    result = 0
    cal(1)
    print("#{} {}".format(tc, result))

'알고리즘 > SWEA' 카테고리의 다른 글

[SWEA] 10726. 이진수 표현  (0) 2021.04.13
[SWEA] 5185. 이진수  (0) 2021.04.13
[SWEA] 5178. 노드의 합  (0) 2021.04.09
[SWEA] 10580 .전봇대  (0) 2021.03.23
[SWEA] 4299. 태혁이의 사랑은 타이밍  (0) 2021.03.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함