1. ๋ฌธ์ ์ค๋ช
์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ทธ๋ํ๋ฅผ ํ๋์ ๊ตฐ์ง์ฒด๋ก ๋ณผ ๋, ์ฃผ์ด์ง ์ ์ฒด ๋ ธ๋์์ ๊ตฐ์ง์ฒด๊ฐ ์ด ๋ช ๊ฐ ์๋์ง ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
2. ์ ๊ทผ ๋ฐฉ์
- ์ธ์ ๋ฆฌ์คํธ ํํ๋ก, ๋ ธ๋์ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ๋ฐฉ๋ฌธ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ๋ฐฐ์ด์ ๊ธฐ์ ์ผ๋ก BFS๋ฅผ ์คํํ๋ค.
ํ ๋ฒ BFS๋ฅผ ๋๋ฉด, ์์ ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๊ฐ ๋ ๊ฒ์ด๋ค. ์ด๋ ํ๋์ ๊ตฐ์ง์ฒด๋ฅผ ์กฐํํ ๊ฑธ๋ก ๋ณผ ์ ์๋ค. - ๋ฐ๋ผ์ BFS๋ฅผ ๋ ํ์๋งํผ ๊ตฐ์ง์ฒด๊ฐ ์กด์ฌํ๋ ๊ฒ์ด๋ฏ๋ก, BFS๋ฅผ ์คํํ ํ์๋ฅผ ๋ฐํํ๋ฉด ๋๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.*;
import java.util.*;
class Solution {
public int solution(int n, int[][] computers) {
int answer = 0;
ArrayList<Integer> [] lists = new ArrayList [n];
boolean [] isVisited = new boolean [n];
for(int i = 0; i < n; i++){
lists[i] = new ArrayList<>();
for(int j = 0; j < n; j++){
if(computers[i][j] == 1){
if(i==j) continue;
lists[i].add(j);
}
}
}
for(int i = 0; i < n; i++){
if(!isVisited[i]){
answer++;
bfs(lists,isVisited, i);
}
}
return answer;
}
public void bfs(ArrayList<Integer> [] lists, boolean [] isVisited, int node) {
ArrayDeque<Integer> aq1 = new ArrayDeque<>();
aq1.add(node);
isVisited[node] = true;
while(!aq1.isEmpty()){
int now = aq1.poll();
for(int i = 0; i < lists[now].size(); i++){
int next = lists[now].get(i);
if(!isVisited[next]){
isVisited[next] = true;
aq1.add(next);
}
}
}
}
}
0