코딩 테스트/프로그래머스

프로그래머스 - 네트워크 문제 (자바)

programmers.co.kr/learn/courses/30/lessons/43162

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있

programmers.co.kr

방문처리가 되지않은 노드를 선택하고 answer을 +1하고 그와 연결된 모든 노드를 방문처리한다.

위를 반복해서 네트워크의 수를 구함

import java.util.LinkedList;
import java.util.Queue;

// 프로그래머스 네트워크 문제
class Network {
    static int answer = 0;
    public int solution(int n, int[][] computers) {
        boolean[] visited = new boolean[n];

        for(int i =0; i < n; i++) {
            if(!visited[i]) {
                bfs(computers, visited, i);
                answer++;
            }
        }
        return answer;
    }

    static void bfs(int[][] computers, boolean[] visited, int start) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(start);
        visited[start] = true;

        while (!q.isEmpty()) {
            int now = q.poll();
            for(int i = 0; i < computers.length; i++) {
                if(computers[now][i] == 1 && !visited[i]) {
                    visited[i] = true;
                    q.offer(i);
                }
            }
        }
    }
}