[프로그래머스] 네트워크

less than 1 minute read

문제정보

문제풀이

하나의 네트워크를 쭉 돌면서 visited 여부를 체크한다. 더 이상 돌 노드가 없으면 새로운 노드를 선택하여 새로운 네트워크를 탐색한다. 이 때 network count를 증가시킨다.

visted는 1차원이면 된다. 현재 노드 입장에서 방문해야할 노드들의 방문여부를 확인하면 되기 때문이다.

class Solution {
	private int[][] computers;
	private boolean[] visited;
	private int netCnt = 0;
    public int solution(int n, int[][] computers) {
        this.computers = computers;
        visited = new boolean[n];
        for(int i=0; i<n; i++){
        	if(visited[i] == false){
        		dfs(i, 0);
        	}
        }

        return netCnt;
    }

    private void dfs(int t, int connCnt){
    	if(visited[t] == true){
    		return;
    	}
    	visited[t] = true;

    	if(connCnt == 0){
    		netCnt++;
    	}

    	for(int i=0; i<computers[0].length; i++){
    		if((t != i) && (visited[i] == false) && (computers[t][i] == 1)){
    			dfs(i, connCnt+1);
    		}
    	}
    }
}

Leave a comment