문제
방향이 있는 간선들의 목록이 주어질 때, 연결된 정점의 컴포넌트(그룹들)가 몇 개인지 반환하는 함수를 작성하세요.
출력
Number
타입을 리턴해야 합니다.주의사항
입출력 예시
const result = connectedVertices([
[0, 1],
[2, 3],
[4, 5],
]);
console.log(result); // 3
const result = connectedVertices([
[0, 1],
[2, 3],
[3, 4],
[3, 5],
]);
console.log(result); // 2
code
// 이차원 배열 요소중의 최댓값 구하기
function connectedVertices(edges) {
let max = 0;
for (let i = 0; i < edges.length; i++) {
let find = Math.max(...edges[i].filter((el) => typeof el === "number"));
max < find ? max === find : null;
}
// 인접 행렬 만들기
let graph = new Array(max+1).fill(0).map((el) => new Array(max+1).fill(0));
// 인접 행렬 간선 연결
graph.forEach((el) => {
let [row, col] = el;
graph[row][col] = 1;
graph[col][row] = 1;
});
// bfs 구현
const bfs = (idx) => {
let a = [idx];
check[idx] = true;
while (a.length !== 0) {
let vertex = a.shift();
for (let i = 0; i < graph[vertex].length; i++) {
if (check[i] === false && graph[vertex][i]) {
check[i] = true;
a.push(i);
}
}
}
}
// 연결된 그래프 찾기 시작
let count = 0;
let check = new Array(graph.length).fill(false);
for (let i = 0; i < max; i++) {
if (check[i] === false) {
bfs(i);
count++;
}
}
return count;
}
평소에 프로그래머스 3단계 문제들을 풀면서 BFS에 대해서 어느정도 공부를 해놔서 이 문제를 겨우겨우 풀 수 있었다.. BFS 구현 코드는 거의 다 비슷해서 이제는 BFS 문제들의 코드들은 다 비슷하게 보인다.
배운대로 잘 풀 수 있어서 정말 좋았다!!
👊 내일의 TIW(today I Will)
Greedy, DFS