문제 분석
문제 설계
const [i, ...arr] = input;
const [n, m] = i.split(' ');
const visit = Array(n + 1).fill(false);
const graph = Array.from({ length: n + 1 }, () => []);
arr.forEach((edge) => {
const [u, v] = edge.split(' ').map(Number);
graph[u].push(v);
graph[v].push(u);
});
const dfsWithWhile = (startNode) => {
const stack = [startNode];
visit[startNode] = true;
while (stack.length > 0) {
const node = stack.pop();
for (const neighbor of graph[node]) {
if (!visit[neighbor]) {
stack.push(neighbor);
visit[neighbor] = true;
}
}
}
};
let count = 0;
for (let i = 1; i <= n; i++) {
if (!visit[i]) {
dfsWithWhile(i);
count++;
}
}
console.log(count);
const [n, m] = i.split(' ');
n: 정점
m: 간선의 개수
const visit = Array(n + 1).fill(false);
const graph = Array.from({ length: n + 1 }, () => []);
arr.forEach(edge => {
const [u, v] = edge.split(' ').map(Number);
graph[u].push(v);
graph[v].push(u);
});
0부터 시작해 +1를 해준다.const dfsWithWhile = (startNode) => {
const stack = [startNode];
visit[startNode] = true; // 현재 정점 방문
while (stack.length > 0) {
const node = stack.pop();
for (const neighbor of graph[node]) { // 연결된 모든 정점 탐색
if (!visit[neighbor]) { // 방문하지 않는 정점만 탐색
stack.push(neighbor);
visit[neighbor] = true;
}
}
}
};
let count = 0;
for (let i = 1; i <= n; i++) {
if (!visit[i]) {
dfsWithWhile(i);
count++;
}
}