[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/76503
[풀이]
리프노드에서 루트노드로 return되면서 가중치의 합과 횟수를 더해나간다. - dfs
(case 7에서 런타임에러가 나는데 방법을 모르겠어서 일단 보류..)
[코드]
import java.util.*;
class Solution {
List<List<Integer>> graph = new ArrayList<>();
long answer;
public long solution(int[] a, int[][] edges) {
//주어진 행동을 통해 트리의 모든 점들의 가중치를 0으로 만드는 것이 불가능하다면 -1을, 가능하다면 최소 몇 번만에 가능한지를 찾아 return
//트리 구성
for(int i=0; i<a.length; i++){
graph.add(new ArrayList<>());
}
for(int i=0; i<edges.length; i++){
graph.get(edges[i][0]).add(edges[i][1]);
graph.get(edges[i][1]).add(edges[i][0]);
}
long[] sum = new long[a.length];
for(int i=0; i<a.length; i++){
sum[i] = a[i];
}
dfs(0, 0, sum); //루트 노드를 0으로 지정, 부모노드도 자신이 됨
if(sum[0]!=0){
answer = -1;
}
return answer;
}
public void dfs(int now, int parent, long[] sum){
for(int i=0; i<graph.get(now).size(); i++){
if(graph.get(now).get(i)==parent) continue;
dfs(graph.get(now).get(i), now, sum);
}
sum[parent] += sum[now];
answer += Math.abs(sum[now]);
}
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[pro] 프로그래머스 level3 86053 금과 은 운반하기 (Java) - 이분탐색 (0) | 2023.01.03 |
---|---|
[pro] 프로그래머스 level3 77886 110 옮기기 (Java) - 문자열, StringBuilder (0) | 2023.01.02 |
[pro] 프로그래머스 level3 84021 퍼즐 조각 채우기 (Java) - BFS (0) | 2023.01.02 |
[pro] 프로그래머스 level3 87694 아이템 줍기 - BFS (0) | 2022.12.28 |
[pro] 프로그래머스 level3 92344 파괴되지 않은 건물 - dp, 배열 누적합 (0) | 2022.12.26 |