티스토리 뷰

알고리즘/프로그래머스

네트워크

이지홍 2023. 9. 10. 01:12
반응형

문제

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

컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 
네트워크의 개수를 return 하도록 solution 함수를 작성하시오.

조건

컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다.
각 컴퓨터는 0부터 n-1인 정수로 표현합니다.
i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현합니다.
computer[i][i]는 항상 1입니다.

풀이방법

function solution(n, computers) {
    const visited = Array.from({length: n}, () => false);
    let answer = 0;
 
    for (let i=0; i<n; i++){
         console.log(visited)
        if(!visited[i]){  // 노드 방문여부 
            DFS(i);
            answer++;
        }
        console.log(answer)
    }
 
    function DFS(node){
        visited[node] = true;
        for(let i=0; i<n; i++){
            console.log(node,i,visited,answer);
            if(computers[node][i] && !visited[i]){ //연결되어있고 방문하지 않았으면
                DFS(i);
            }
        }
    }
 
    return answer; // 최종적으로 찾은 네트워크 개수 반환

}

1.answer 변수는 네트워크의 개수를 나타내기 위한 변수입니다.

2.visited 배열은 노드의 방문 여부를 나타내기 위한 배열입니다. 처음에는 모든 노드가 방문하지 않은 상태로 초기화합니다.

3.dfs 함수는 깊이 우선 탐색(Depth-First Search) 알고리즘을 구현한 함수입니다. 노드 번호를 인자로 받아서 해당 노드와 연결된 모든 노드를 방문하도록 합니다.

4. 번째 반복문은 모든 노드에 대해 순차적으로 반복합니다. 만약 아직 방문하지 않은 노드라면, 해당 노드부터 시작하여 DFS 수행하고 네트워크 개수를 증가시킵니다.

5.dfs 함수 내부에서 현재 노드를 방문했다고 표시하고, 해당 노드와 연결된 모든 노드 중에서 방문하지 않은 노드를 찾아서 재귀적으로 DFS 수행합니다.

반응형

'알고리즘 > 프로그래머스' 카테고리의 다른 글

타겟 넘버  (2) 2023.09.09
숫자의 표현  (0) 2023.09.08
N으로 표현  (0) 2023.03.08
프린터  (0) 2023.02.17
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함