본문 바로가기
Beakjoon&프로그래머스/Java

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

by 현장 2026. 1. 8.

-Code

import java.util.*;

class Solution {
    static boolean[] visited;
    
    public int solution(int n, int[][] computers) {
        int answer = 0;
        // visited
        visited = new boolean[n + 1];
        // 리스트로 셋팅 
        ArrayList<Set<Integer>> nodes = new ArrayList<>();
        for (int i = 0; i <= n; i++) nodes.add(new HashSet<>());
        // node 셋팅
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i == j) continue;
                if (computers[i][j] == 1) {
                    nodes.get(i + 1).add(j + 1);
                    nodes.get(j + 1).add(i + 1);    
                }
            }
        }
        // 각 노드를 방문하면서 연결되어 있으면 방문 처리후 answer++
        for (int i = 1; i <= n; i++) {
            if (!visited[i]) {
                DFS(i, nodes);
                answer++;
            }
        }
        
        return answer;
    }
    // BFS 로직
    private static void DFS(int now, ArrayList<Set<Integer>> nodes) {
        // 현재 노드 방문 처리
        visited[now] = true;
        
        for (int nextNode : nodes.get(now)) {
            // 방문안한 경우 탐색
            if (!visited[nextNode]) {
                // 방문 처리 및 탐색
                visited[nextNode] = true;
                DFS(nextNode, nodes);
            }
        }
    }
}

로직을 보기 편하고 작정하기 쉽도록 입력받은 cumputers를 리스트로 변경하여 풀었습니다.