43162. 네트워크
2026-01-31
프로그래머스 43162번 풀이
이 글은 Obsidian에서 마이그레이션되었으며, 그 과정에서 AI의 도움을 받았습니다. 오류나 누락된 내용이 있다면 댓글로 알려주세요!
문제
풀이
아이디어
BFS를 느끼자… 이번 네트워크나 백준의 토마토 문제처럼 어떤 지점을 기준으로 연결된 점을 통해서 영역을 넓혀가는 느낌은 bfs를 먼저 떠올리면 된다.
이 문제 역시 어떤 컴퓨터를 기준으로 인접한 컴퓨터들을 타고 타고 가서 연결될 수 있는 가장 넓은 영역을 구하는 작업이 필요하고, 이건 bfs를 이용하면 간단히 해결할 수 있다.
그리고 그 영역들의 개수를 구해야 하므로 영역에 포함된 컴퓨터들을 방문 표시해두면서 새로운 영역들을 계속 찾아가면 (bfs를 수행) 답을 구할 수 있다.
이게 왜 Level 3 문제일까… 인접행렬이 주어져서 그런가?
코드
function solution(n, computers) {
let answer = 0;
const visited = new Uint8Array(n);
function bfs(start) {
const queue = [start];
let head = 0;
visited[start] = 1;
while (head < queue.length) {
const cur = queue[head++];
for (let next = 0; next < n; next++) {
if (computers[cur][next] === 0) continue;
if (visited[next]) continue;
visited[next] = 1;
queue.push(next);
}
}
}
for (let start = 0; start < n; start++) {
// 이미 어떤 네트워크에 속해 있는 경우는 제외한다.
if (visited[start]) continue;
bfs(start);
answer++; // bfs 1번 = 네트워크 하나.
}
return answer;
}