728x90
https://programmers.co.kr/learn/courses/30/lessons/86971
코딩테스트 연습 - 9주차_전력망을 둘로 나누기
9 [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] 3 7 [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] 1
programmers.co.kr
문제 풀이
import java.util.*;
class Solution {
int N, d_min; // difference in the num of towers (+min => answer)
boolean e[][], b[]; // edge arr, is visited?
public int solution(int n, int[][] wires) {
e = new boolean[n][n]; int u, v; //
b = new boolean[n];
for (int[] w : wires) {
u = --w[0];
v = --w[1];
e[u][v] = e[v][u] = true;
}
N = d_min = n;
dfs(0);
return d_min;
}
public int dfs( int i ) {
b[i] = true;
int s = 1, d;
for (int j = 0; j < N; ++j) { // adjacent node
if (!b[j] && e[i][j]) {
b[j] = true;
s += dfs(j);
}
}
d = Math.abs(2 * s - N);
d_min = d_min > d ? d : d_min;
return s;
}
}
0번 노드(문제에서는 1번 노드)를 루트 노드라고 가정.
각 노드의 서브 노드의 개수를 각각 구함 ( dfs )
개수가 가장 많은 노드와의 연결을 끊은 후 두 전력망의 송전탑 개수 차를 구함
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 프로그래머스 ( Programmers )' 카테고리의 다른 글
[프로그래머스(Programmers)][자바(java)] (Lv1) 나머지가 1이 되는 수 찾기 <월간코드챌린지3> (0) | 2021.10.16 |
---|---|
[프로그래머스(Programmers)][자바(java)] (Lv2) 10주차 - 교점에 별 만들기 <위클리 챌린지> (0) | 2021.10.13 |
[프로그래머스(Programmers)][자바(java)] (Lv1) 8주차 - 최소직사각형 <위클리 챌린지> (0) | 2021.09.27 |
[프로그래머스(Programmers)][자바(java)] (Lv3) 금과 은 운반하기 <월간코드챌린지3> (0) | 2021.09.18 |
[프로그래머스(Programmers)][자바(java)] (Lv2) 빛의 경로 사이클 <월간코드챌린지3> (0) | 2021.09.18 |