๋คํธ์ํฌ (with.Java)
๋คํธ์ํฌ (with.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์ ๋๋ค.
๋ฌธ์ ํ์ด
import java.util.Arrays;
class Solution {
boolean[] visited;
int answer = 0;
public int solution(int n, int[][] computers) {
visited = new boolean[n];
Arrays.fill(visited, false);
for(int i = 0; i < n; i++){
if(visited[i] == false){
answer++;
dfs(i, visited, computers);
}
}
return answer;
}
public void dfs(int idx, boolean[] visited, int[][] computers){
visited[idx] = true;
for(int i = 0; i < computers.length; i++){
if(visited[i] == false && computers[idx][i] == 1){
dfs(i, visited, computers);
}
}
}
}
ํ์ด ์ค๋ช
์ด ์ฝ๋๋ ๋คํธ์ํฌ์ ๊ฐ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
์ฃผ์ด์ง n๊ฐ์ ์ปดํจํฐ์ n x n ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด computers๋ฅผ ์ด์ฉํ์ฌ, ์๋ก ์ฐ๊ฒฐ๋ ๋คํธ์ํฌ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ด๋ฅผ ์ํด ๊น์ด ์ฐ์ ํ์(DFS) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
์ฐ์ , visited ๋ฐฐ์ด์ ์ ์ธํ์ฌ ๊ฐ ์ปดํจํฐ๊ฐ ๋ฐฉ๋ฌธ๋์๋์ง ํ์ธํฉ๋๋ค. ๋ฐฐ์ด์ ํฌ๊ธฐ๋ n์ผ๋ก ์ค์ ๋๊ณ , ์ด๊ธฐ๊ฐ์ ๋ชจ๋ false๋ก ์ฑ์์ง๋๋ค.
์ด๋ ๋ชจ๋ ์ปดํจํฐ๊ฐ ์ฒ์์๋ ๋ฐฉ๋ฌธ๋์ง ์์์์ ๋ํ๋ ๋๋ค.
์ดํ, n๊ฐ์ ์ปดํจํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ํ์ํ๋ฉฐ, ๋ฐฉ๋ฌธ๋์ง ์์ ์ปดํจํฐ๋ฅผ ๋ฐ๊ฒฌํ ๋๋ง๋ค ๋คํธ์ํฌ์ ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ํด๋น ์ปดํจํฐ๋ฅผ ์์์ ์ผ๋ก DFS๋ฅผ ์ํํฉ๋๋ค.
DFS ํจ์ dfs๋ ํ์ฌ ์ธ๋ฑ์ค idx๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ ํ, ํด๋น ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์ปดํจํฐ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธํฉ๋๋ค.
DFS๋ ํ์ฌ ์ปดํจํฐ idx์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ปดํจํฐ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํฉ๋๋ค.
computers[idx][i] ๊ฐ์ด 1์ด๊ณ , i๋ฒ์งธ ์ปดํจํฐ๊ฐ ๋ฐฉ๋ฌธ๋์ง ์์ ๊ฒฝ์ฐ์๋ง ์ฌ๊ท์ ์ผ๋ก DFS๋ฅผ ํธ์ถํฉ๋๋ค.
์ด๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ปดํจํฐ๋ฅผ ํ ๋คํธ์ํฌ๋ก ๋ฌถ์ด์ค๋๋ค.
์ด ๊ณผ์ ์ ํตํด ๋ชจ๋ ์ปดํจํฐ๋ฅผ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ฉฐ, ์๋ก์ด ๋คํธ์ํฌ๋ฅผ ๋ฐ๊ฒฌํ ๋๋ง๋ค answer๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
์ต์ข ์ ์ผ๋ก, ๋ชจ๋ ์ปดํจํฐ๋ฅผ ํ์ํ ํ answer ๊ฐ์ ๋ฐํํ์ฌ ๋คํธ์ํฌ์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์ด ์ฝ๋๋ DFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ๋คํธ์ํฌ์ ๊ฐ์๋ฅผ ๊ณ์ฐํ๋ฉฐ, ๊ฐ ์ปดํจํฐ๊ฐ ์ด๋ค ๋คํธ์ํฌ์ ์ํ๋์ง ํ์ธํ๋ ๊ณผ์ ์ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค!