코딩 테스트

(Java) 프로그래머스 - 네트워크

로승리 2022. 10. 6. 21:53

레벨 3에 맞지 않게 간단한 문제였다. 문제를 풀고 나서 다른 분들 코드를 봐도 거의 똑같은 방식이라서 놀랐다.

DFS / BFS 둘 다 가능한데 DFS가 먼저 떠올라서 DFS를 이용해서 풀이했다.


로직

n개의 컴퓨터를 탐색할 visited 배열을 만들고 n번 탐색한다.

 

최종 코드

class Solution {
    public int solution(int n, int[][] computers) {
        int answer = 0;
        
        // 방문 배열 초기화
        boolean[] visited = new boolean[n];

        // n개의 컴퓨터에 대해 탐색
        for (int i = 0; i < n; i++) {
            // 방문하지 않은 컴퓨터라면 탐색
            if(!visited[i]) {
                dfs(computers, visited, i);
                answer++;
            }
        }

        return answer;
    }
    static void dfs(int[][] computers, boolean[] visited, int idx) {
        // 현재 노드 방문처리
        visited[idx] = true;

        for (int i = 0; i < visited.length; i++) {
            // 자기 자신이 아니고 방문한적이 없고 값이 1이라면 재귀 호출
            if(idx != i && !visited[i] && computers[idx][i] == 1) {
                dfs(computers, visited, i);
            }
        }
    }
}