네트워크
문제정의
네트워크의 개수가 몇 개인지 판별하는 문제이다. 기본적인 탐색문제이다.
문제 링크
문제풀이
전체 코드는 다음과 같다. 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
32
33
34
35
36
37
38
39
40
41
42import java.util.*;
public class Network {
//프로그래머스 문제풀이 level3 네트워크
public static void main(String[] args) {
int[][] computers = {
{1, 1, 0},
{1, 1, 0},
{0, 0, 1}
};
int n = 3;
int answer = 0;
boolean[] visited = new boolean[n];
for(int i = 0 ; i < n; i++)
{
if(!visited[i])
{
answer++;
visited[i] = true;
Stack<Integer> stack = new Stack<>();
stack.push(i);
while(!stack.empty())
{
int t = stack.peek();
stack.pop();
for(int j = 0; j < n; j++)
{
if(computers[t][j] == 1 && !visited[j])
{
visited[j] = true;
stack.push(j);
}
}
}
}
}
}
}
반복 횟수를 계산해보자면 \((m+n-2)(m+n-2)m*m\)이 된다. 따라서 최고차항을 따로 떼어내면 최종 시간복잡도는 \(O(m^2n^2)\)이다.
테스트
예전만 해도 dfs가 왜 스택이고 bfs는 왜 큐인지 이해가 잘 안갔는데 어느 새, 혼자서 아무것도 참고하지 않고 dfs를 구현할 수 있게 되었다. 늦은 감이 없지 않아 있지만, 그래도 성장했음을 느낀다.