프로그래머스 모두 0으로 만들기

wook2·2021년 7월 4일
0

알고리즘

목록 보기
20/117

https://programmers.co.kr/learn/courses/30/lessons/76503

그래프 dfs 재귀를 깊게 이해하고 있는가를 물어보는 문제였다.
문제에서 나온 그래프가 트리구조라는 정보를 이용해,
트리구조에서 어떤 노드이던지 루트노드가 될 수 있다는 정보를 이용해 dfs재귀를 통해 구현할 수 있었다.

import sys
sys.setrecursionlimit(10000000)
answer = 0
def solution(a, edges):
    global answer
    n = len(a)
    graph = [[] for i in range(n)]
    for edge in edges:
        graph[edge[0]].append(edge[1])
        graph[edge[1]].append(edge[0])
    if sum(a) != 0:
        return -1
    visited = [0]*(n+1)
    dfs(a,0,graph,visited)
    return answer

def dfs(a,x,graph,visited):
    global answer
    visited[x] = 1
    for t in graph[x]:
        if not visited[t]:
            a[x] += dfs(a,t,graph,visited)
    answer += abs(a[x])
    return a[x]
    
profile
꾸준히 공부하자

0개의 댓글