Lewis's Tech Keep
[프로그래머스] 모두 0으로 만들기 - JAVA 본문
- 링크 : https://programmers.co.kr/learn/courses/30/lessons/76503
- 참고 링크 : https://dev-note-97.tistory.com/263
- 풀이
: dfs 진행 후 역순으로 계산하며 (dfs 의 함수 호출 스택은 쌓으면 역으로 풀리는 성질 이용)
: 각 단계에서 더해질 값을 계산
더보기
import java.util.*;
class Solution {
boolean[] visited;
List<Integer>[] edgesList;
long[] edgeWeights;
long sum;
public long solution(int[] a, int[][] edges) {
int edgeLen = a.length;
for (int weight : a) {
sum += weight;
}
if (sum != 0) {
return -1;
}
visited = new boolean[edgeLen];
edgeWeights = new long[edgeLen];
edgesList = new ArrayList[edgeLen];
for (int i=0; i<edgeLen; i++) {
edgesList[i] = new ArrayList<Integer>();
edgeWeights[i] = a[i];
}
for (int[] edge: edges) {
int v1 = edge[0];
int v2 = edge[1];
edgesList[v1].add(v2);
edgesList[v2].add(v1);
}
dfs(0);
return sum;
}
public long dfs(int currV) {
visited[currV] = true;
for (int i=0; i<edgesList[currV].size(); i++) {
int nextV = edgesList[currV].get(i);
if (!visited[nextV]) {
edgeWeights[currV] += dfs(nextV);
}
}
sum += Math.abs(edgeWeights[currV]);
return edgeWeights[currV];
}
}
'Java > 알고리즘' 카테고리의 다른 글
[프로그래머스] 모음 사전 - JAVA (0) | 2021.09.06 |
---|---|
[프로그래머스] 카드 짝 맞추기 - JAVA (0) | 2021.08.26 |
[프로그래머스] 광고 삽입 - JAVA (0) | 2021.08.23 |
[프로그래머스] 퍼즐 조각 채우기 - JAVA (0) | 2021.08.23 |
[BOJ][16472] 고냥이 - JAVA (0) | 2021.06.27 |
Comments