-
[Algorithm] 프로그래머스 - 네트워크 ( dfs - 깊이 우선탐색)Alogorithm 2020. 5. 28. 17:44반응형
프로그래머스 문제입니다.
문제 설명
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 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입니다.
입출력
=
입출력 설명
예제 #1
아래와 같이 2개의 네트워크가 있습니다.예제 #2
아래와 같이 1개의 네트워크가 있습니다.
문제풀이
function solution(n, computers) { var answer = 0 // (1) let visited = new Array(n).fill(false) // (2) for (let i = 0; i < n; i++) { if (!visited[i]) { dfs(i) answer++ } } // (3) function dfs (num) { visited[num] = true for (let i = 0; i < n; i++) { if (i !== num && computers[num][i] && !visited[i]) dfs (i) } } return answer }
idea: dfs를 하기 위해서 재귀함수를 사용합니다.
1. visited 함수를 N 크기만큼 선언하고 false(방문x)로 초기화합니다.
2. 첫번째 노드부터 방문하지 않았을 경우 dfs 함수를 통해서 깊이 탐색을 시작합니다.
그 후 answer(네트워크의 수)를 증가시켜줍니다.
dfs함수에서 계산하기에는 백트래킹하는 것이 비효율적이므로, 탐색을 시작한 노드부터 증가시키는 것이 효율적으로 보입니다.
3. dfs 함수를 선언해줍니다.
해당 노드를 방문했음으로 상태를 바꿔줍니다,
해당 노드 기준으로 자신이 아니고, 방문하지 않은 연결된 다른 노드를 찾아 dfs를 실행합니다.
그리고 return!
반응형'Alogorithm' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 예산 (이분탐색) (0) 2020.05.29 [Algorithm] 프로그래머스 - 여행경로 (bfs || dfs - 너비 || 깊이 우선탐색) (0) 2020.05.29 [Algorithm] 프로그래머스 - 타겟 넘버 (bfs || dfs - 너비 || 깊이 우선탐색) (0) 2020.05.27 [Algorithm] 프로그래머스 - 소수 찾기 (브루트포스 - Brute Force) (0) 2020.05.25 [Algorithm] 프로그래머스 - 가장 큰 수 (정렬 - Sorting) (0) 2020.05.24