Dev/Programmers

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

마이캣호두 2024. 12. 17. 15:31
반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

Review

DFS와 BFS 모두로 풀어보고 싶어서 도전해봤다.

 

 

Code

import java.util.*;

class Solution {
    boolean[] visited;
        
    public int solution(int n, int[][] computers) {
        int answer = 0;
        visited = new boolean[n];
        
        for (int i = 0; i < n; i++) {
            if (!visited[i]) {
                // dfs(i, n, computers);
                bfs(i, n, computers);
                answer++;
            }
        }
        return answer;
    }
    
    private void dfs(int node, int n, int[][] computers) {
        visited[node] = true;
        
        for (int i = 0; i < n; i++) {
            if (!visited[i] && computers[node][i] == 1) {
                dfs(i, n, computers);
            }
        }
    }
    
    private void bfs(int node, int n, int[][] computers) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(node);
        visited[node] = true;
        
        while (!q.isEmpty()) {
            int current = q.poll();
            
            for (int i = 0; i < n; i++) {
                if (computers[current][i] == 1 && !visited[i]) {
                    visited[i] = true;
                    q.offer(i);
                }
            }
        }
    }
}
반응형