Contents

๋„คํŠธ์›Œํฌ (with.Java)

   Oct 22, 2024     3 min read

๋„คํŠธ์›Œํฌ (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 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉฐ, ๊ฐ ์ปดํ“จํ„ฐ๊ฐ€ ์–ด๋–ค ๋„คํŠธ์›Œํฌ์— ์†ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!