[프로그래머스] 코딩테스트 연습 - 78
level 3 - 네트워크
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.
컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오.
입출력 예시
n : 3
computers : [[1, 1, 0], [1, 1, 0], [0, 0, 1]]
-> 2
function solution(n, computers) {
var parent = [...Array(n).keys()];
for(var i=0; i<computers.length; i++) {
for(var j=0; j<computers[i].length; j++) {
if (i == j || computers[i][j] == 0) continue;
union(i, j);
}
}
function find(num) {
if (parent[num] == num) return num;
parent[num] = find(parent[num]);
return parent[num];
}
function union(a, b) {
a = find(a);
b = find(b);
if (a < b) parent[b] = a;
else parent[a] = b;
for(var i=0; i<parent.length; i++) parent[i] = find(parent[i])
}
return new Set(parent).size;
}
방금 전에 union 사용했다고 또 사용함ㅎㅎㅎ
근데 자꾸 틀려서 뭐지 했는데 마지막에 for문으로 다시 parent 설정을 해줘야했음
그리고 원래 dfs 카테고리에 있어서 그런지 dfs로 많이 푸셨드라
function solution(n, computers) {
var answer = 0;
var visited = new Array(n).fill(false);
function dfs(computers, i) {
visited[i] = true;
for(var j = 0; j < computers.length; j++) {
if(!visited[j] && computers[i][j] === 1) {
dfs(computers, j);
}
}
}
for(var i = 0; i < n; i++) {
if(!visited[i]) {
answer++;
dfs(computers, i);
}
}
return answer;
}
그래서 보니까 dfs가 훨씬 쉽더라
껄껄껄껄걸껄
Author And Source
이 문제에 관하여([프로그래머스] 코딩테스트 연습 - 78), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@krkorklo58/프로그래머스-코딩테스트-연습-78저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)