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

seb Incode·2022년 5월 27일
0
post-thumbnail

문제설명


풀이

DFS로 노드를 방문하되, 반복문으로 방문하지 않은 노드가 있는지 체크하면 된다. break문 까먹어서 애를 먹었다;

소스코드

import java.util.*;

class Solution {
    public int solution(int n, int[][] computers) {
        int answer = 0;
        boolean[] visited = new boolean[n]; //방문 표시 배열
        int v_count = 0;    //방문한 노드 개수
        Stack<Integer> st = new Stack<>();  //dfs를 위한 스택

        
        st.push(0); //0번노드부터 방문
        //visited[0] = true;  //방문 표시
        
        //모든 노드를 방문할 때 까지 반복
        while(v_count < n){
            
            while(!st.isEmpty()){
                int v = st.pop();   //스택에서 꺼냄
                visited[v] = true; //방문 표시
                v_count++;  //방문 노드 개수 +1
                for(int i=0;i<n;i++){
                    if(computers[v][i] != 0 && !visited[i] && i !=v){
                        visited[i] = true;
                        st.push(i);
                    }
                }
            }
            answer++;   //네트워크 수 계산
            
            //방문하지 않은 컴퓨터 탐색
            for(int i=0;i<visited.length;i++){
                if(!visited[i]){
                    st.push(i);
                    break;
                }
            }
            
        }
        
        return answer;
        
    }
}

0개의 댓글