티스토리 뷰

 

https://programmers.co.kr/learn/courses/30/lessons/43162?language=java 

 

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

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

programmers.co.kr

i 번째 노드가 어떤 network 에 속하는지에 대한 정보를 담고 있는 network 배열을 생성합니다.

computers 배열을 순회하면서 network 배열을 업데이트 하는 makeNetwork 메서드를 작성합니다.

makeNetwork는 dfs 를 이용하여 input 으로 들어온 idx 와 연결되어 있는 모든 network 를 확인하고 만약 연결되어있다면 netNum 으로 network 값을 업데이트 합니다.

network 의 모든 배열이 업데이트가 완료될때까지 만든 network 개수를 답으로 반환합니다. 

class Solution {
    public void makeNetwork(int[][] computers, int[] network, int netNum, int idx) {
        network[idx] = netNum;
        int[] adjacent = computers[idx];
        for (int i = 0; i < adjacent.length; i++) {
            if (adjacent[i] == 1 && network[i] == 0) {
                makeNetwork(computers, network, netNum, i);
            }
        }
    }

    public int solution(int n, int[][] computers) {
        int answer = 0;
        int[] network = new int[n];

        for (int i = 0; i < n; i++) {
            if (network[i] == 0) {
                answer++;
                makeNetwork(computers, network, answer, i);
            }
        }

        return answer;
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함