문제를 보면 전형적인 dfs,bfs 알고리즘 문제이다. dfs와 bfs 두개 방식을 따로 풀었다.
import java.util.*;
class Solution {
static boolean[] visit= new boolean[200];
static int[][] network = new int[200][200];
static Queue<Integer> queue = new LinkedList<>();
public int solution(int n, int[][] computers) {
int answer = 0;
network = computers;
visit = new boolean[n];
// 1. dfs
for(int i = 0 ; i < n; i++){
if(visit[i] == false){
answer++;
dfs(i);
}
}
int aa = 0;
// 2. bfs
for(int i = 0 ; i < n ; i++){
if(visit[i] == false){
visit[i] = true;
queue.add(i);
answer++;
}
while(!queue.isEmpty()){
aa = queue.poll();
visit[aa] = true;
for(int j = 0; j < n ; j++){
if(network[aa][j] == 1 && visit[j] == false){
queue.add(j);
}
}
}
}
return answer;
}
static void dfs(int pre){
visit[pre] = true;
for(int i = 0 ; i < network.length; i++){
if(network[pre][i] == 1 && visit[i] == false){
dfs(i);
}
}
}
}