네트워크

2022. 3. 30. 16:44PS/Programmers

[문제 접근법]

- 트리 탐색 중 깊이 우선 탐색(DFS)을 이용하여 네트워크 개수를 반환하였다.

문제 설명

 

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

 

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

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

programmers.co.kr


[구현 1]

- DFS 탐색 및 중복 방문을 막기 위해(boolean [] visit)을 이용하여 네트워크 개수를 구하였음

searchNetwork 함수가 재귀적으로 깊이 우선 탐색을 한다.

package com.codingtest.programmers.level3;

//https://programmers.co.kr/learn/courses/30/lessons/43162
public class Network {

    //DFS 탐색
    public int searchNetWork(int[][] computers, int pos, boolean[] visit) {
        visit[pos] = true;

        for (int j = 0; j < computers[pos].length; j++) {
            if (pos != j && !visit[j] && computers[pos][j] == 1) {
                searchNetWork(computers,j,visit);
            }
        }

        return 1;
    }

    public int solution(int n, int[][] computers) {
        int answer = 0;
        boolean[] visit = new boolean[n]; //방문 여부 확인

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

        return answer;
    }

   
}

 

[구현 2]

- Que를 활용하여 컴퓨터를 1 ...n 까지 하나씩 넣어서 BFS탐색을 하였다. DFS와 동일하게 중복 연산을 막기 위해 visit 배열을 생성하여 체크하였음.

 	//BFS 탐색
    public int searchNetWorkBFS(int[][] computers, int n) {
        int count = 0;
        boolean[] visit = new boolean[n];
        Queue<Integer> que = new LinkedList<>();

        for (int i = 0; i < n; i++) {
            if (!visit[i]) {
                que.add(i);
                count++;

                while (!que.isEmpty()) {
                    Integer network = que.poll();

                    for (int j = 0; j < computers[network].length; j++) {
                        if (network != j && !visit[j] && computers[network][j] == 1) {
                            visit[j] = true;
                            que.add(j);
                        }

                    }
                }
            }
        }


        return count;
    }

    public int solution(int n, int[][] computers) {
        return searchNetWorkBFS(computers, n);
    }
반응형

'PS > Programmers' 카테고리의 다른 글

타겟 넘버  (0) 2022.03.31
[KAKAO] 오픈채팅방  (0) 2022.03.30
[Summer/Winter Coding(~2018)] 스킬트리  (0) 2022.03.29
더 맵게  (0) 2022.03.24
[2021 Dev-Matching] 다단계 칫솔 판매  (0) 2022.03.23