Haribo ML, AI, MATH, Algorithm

모두 0으로 만들기


import sys
sys.setrecursionlimit(10**6)
from collections import defaultdict
def solution(a, edges):
    global  answer, graph
    graph = defaultdict(list)
    answer = 0
    for v1, v2 in edges:
        graph[v1].append(v2)
        graph[v2].append(v1)
    dfs(a, 0, -1)
    return -1 if sum(a) else answer

def dfs(a, node, parent) :
    global answer
    for child in graph[node] :
        if child == parent : continue
        dfs(a, child, node)
    a[parent] += a[node]
    answer += abs(a[node])
    a[node] = 0

풀이

트리 DFS 기본 문제다.

자식노드의 가중치를 부모노드 가중치에 더해준다.

자식노드의 가중치의 절대값을 count한다.

모든 traverse가 끝난 뒤, return -1 if root not 0 else answer

을 해주면 된다.

import sys
sys.setrecursionlimit(10**6)
from collections import defaultdict
def solution(a, edges):
    global  answer, graph
    graph = defaultdict(list)
    answer = 0
    for v1, v2 in edges:
        graph[v1].append(v2)
        graph[v2].append(v1)
    dfs(a, 0, -1)
    # sum(a) : root 가중치가 0 인지 확인
    return -1 if sum(a) else answer

def dfs(a, node, parent) :
    global answer
    # recursive DFS part
    for child in graph[node] :
        if child == parent : continue
        dfs(a, child, node)
    # 부모노드 가중치치에 자식노드 가중치 더하기
    a[parent] += a[node]
    # 자식노드 가중치 절대값 count
    answer += abs(a[node])
    # 자식노드 가중치 0
    a[node] = 0

Similar Posts

이전 포스트 괄호 회전하기

다음 포스트 MNIST augmentation to RGB

Comments