(プログラマ)ネットワーク(Java、Java)


https://programmers.co.kr/learn/courses/30/lessons/43162

問題の説明


ネットワークとは、コンピュータ間で情報を交換する接続形式を指す.例えば、コンピュータAがコンピュータBに直接接続され、コンピュータBがコンピュータCに直接接続されている場合、コンピュータAとコンピュータCは間接的に接続されて情報を交換することもできる.そのため、コンピュータA、B、Cは同じネットワーク上に存在する.
指定されたコンピュータの個数nが、接続情報を含む2次元配列コンピュータをパラメータとする場合、ネットワークの個数を返すために解関数を記述します.

せいげんじょうけん

  • コンピュータの数nは、1つまたは複数の200以下の自然数である.
  • 各コンピュータは、0からn−1までの整数として表される.
  • コンピュータ番号が
  • iの場合、コンピュータ[i][j]は1として表される.
  • コンピュータ[i][i]は常に1である.
  • I/O例


    ncomputersreturn3{{1, 1, 0}, {1, 1, 0}, {0, 0, 1}}23{{1, 1, 0}, {1, 1, 1}, {0, 1, 1}}1

    I/O例説明


    例1
    次の2つのネットワークがあります.

    例2
    次のようにネットワークがあります.

    コード#コード#

    class Solution {
    	public static boolean[] dfs(int[][] computers, int index, boolean[] visited) {
    		visited[index] = true;
    		for(int i = 0; i < computers[index].length; i++) {
    			if (i != index && !visited[i] && computers[index][i] == 1) {
    				visited = dfs(computers, i, visited);
    			}
    		}
    		return visited;
    	}
    	
    	public static int solution(int n, int[][] computers) {
        		int answer = 0;
            	boolean[] visited = new boolean[n]; // 초기값은 모두 false로 자동 초기화.
            	for (int i = 0; i < n; i++) {
            		if (!visited[i]) {
            			answer++;
            			dfs(computers, i, visited);
            		}
            	}
            	return answer;
        	}
    }