プログラマーLV.3ネットワーク
1.問題リンク
https://programmers.co.kr/learn/courses/30/lessons/43162
2.解答
-findParent:関数の最終親を検索
-union:
- return parent[x] = findParent(parent[x]);
−多くの問題において、上述した実施は、時間を短縮するであろう.
-さらに時間がかかる場合もあります.
1.自分を親にする(大切)
2.findParent,union関数の実装
3.問題の条件に従ってParentを検索し、union
3.コード
class Solution {
static int[] parent;
public int solution(int n, int[][] computers) {
int answer = computers.length;
/**
* 1. 자신을 부모로 갖는 배열 만들기
*/
parent = new int[computers.length];
for (int i = 0; i < parent.length; i++) {
parent[i] = i;
}
/**
* 연결관계에 있는 두 노드를 하나로 합치기
*/
for (int i = 0; i < computers.length; i++) {
for (int j = 0; j < computers[i].length; j++) {
if (computers[i][j] == 1) {
if (findParent(i) != findParent(j)) {
union(i, j);
answer--;
}
}
}
}
return answer;
}
/**
* 2. 자신의 부모 찾기
*/
static int findParent(int x) {
if (parent[x] != x) {
return parent[x] = findParent(parent[x]);
}
return x;
}
/**
* 3. 두 노드의 부모를 한 쪽의 부모로 맞추기
*/
static void union(int a, int b) {
a = findParent(a);
b = findParent(b);
if (a < b)
parent[b] = a;
else
parent[a] = b;
}
}
4.採点結果
5.感じ
Reference
この問題について(プログラマーLV.3ネットワーク), 我々は、より多くの情報をここで見つけました https://velog.io/@gan/프로그래머스-LV.3-네트워크テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol