https://programmers.co.kr/learn/courses/30/lessons/43162?language=java
๋ฌธ์
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ A์ ์ปดํจํฐ B๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๊ณ , ์ปดํจํฐ B์ ์ปดํจํฐ C๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ ๋ ์ปดํจํฐ A์ ์ปดํจํฐ C๋ ๊ฐ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํจํฐ A, B, C๋ ๋ชจ๋ ๊ฐ์ ๋คํธ์ํฌ ์์ ์๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ปดํจํฐ์ ๊ฐ์ n, ์ฐ๊ฒฐ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด computers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋คํธ์ํฌ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์์ค.
์ ํ์ฌํญ
- ์ปดํจํฐ์ ๊ฐ์ n์ 1 ์ด์ 200 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ๊ฐ ์ปดํจํฐ๋ 0๋ถํฐ n-1์ธ ์ ์๋ก ํํํฉ๋๋ค.
- i๋ฒ ์ปดํจํฐ์ j๋ฒ ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด computers[i][j]๋ฅผ 1๋ก ํํํฉ๋๋ค.
- computer[i][i]๋ ํญ์ 1์ ๋๋ค.
ํ์ด
์ด ๋ฌธ์ ๋ BFS๋ฅผ ์ด์ฉํด์ ํ์๋ค.
computer ๋ฐฐ์ด์์ i != j ์ด๋ฉด์ ๊ฐ์ด 1์ธ i ์ j๋ฅผ List ๋ฐฐ์ด (adj) ์ ์๋ก ์ ์ฅํด์ค๋ค.
๊ทธ๋ ๊ฒ ํด์ isVisited ๋ฐฐ์ด๋ก 0 ~ N-1 ๊น์ง for ๋ฌธ์ ๋๋ ค ๋ง์ฝ !isVisited[idx] ์ด๋ฉด BFS๋ฅผ ๋๋ฆฌ๊ณ , answer + 1 ํด์ค๋ค.
์ฝ๋
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class ๋คํธ์ํฌ {
static boolean[] isVisited;
static List<Integer>[] adj;
public static int solution(int n, int[][] computers) {
int answer = 0;
isVisited = new boolean[n];
adj = new ArrayList[n];
for(int i = 0 ; i < n ; i++){
adj[i] = new ArrayList<>();
}
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++){
if(i == j)
continue;
if(computers[i][j] == 1){
adj[i].add(j);
adj[j].add(i);
}
}
}
for(int i = 0 ; i < n ; i++){
if(!isVisited[i]){
isVisited[i] = true;
BFS(i);
answer++;
}
}
return answer;
}
private static void BFS(int i) {
Queue<Integer> queue = new LinkedList<>();
queue.add(i);
while(!queue.isEmpty()){
int now = queue.poll();
isVisited[now] = true;
for(int next : adj[now]){
if(!isVisited[next]){
queue.add(next);
}
}
}
}
public static void main(String[] args) {
int[][] computers = {{1,1,0}, {1,1,0}, {0,0,1}};
System.out.println(solution(3, computers));
}
}