https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
소스코드
class Solution {
int computer[][];
boolean visited[];
public int solution(int n, int[][] computers) {
int answer = 0;
computer = computers;
visited = new boolean[n];
for (int i = 0; i < n; i++) {
if(!visited[i]) {
answer += 1;
dfs(i);
}
}
return answer;
}
void dfs(int now) {
if(visited[now]) return;
visited[now] = true;
for (int i = 0; i < computer[0].length; i++) {
if(computer[now][i] == 1) dfs(i);
}
}
}
해결방법
for문을 사용해 모든 정점의 방문처리를 확인하고 방문 되어있지 않다면 결과값을 1 증가 시키고 DFS를 진행하여 연결되어 있는 정점들을 방문 처리한다. 결과값에는 네트워크의 수가 저장된다.