programmers.co.kr/learn/courses/30/lessons/43162?language=java
## 접근방법
같은 네트워크들끼리는 무조건 연결되어 있다는 점을 착안해서 문제를 풀어보자. 어떤 컴퓨터에서 탐색을 시작하면, 연결된 컴퓨터들을 모두 찾을 수 있다.
완전 탐색 기법인, BFS와 DFS를 둘다 가능하며, 시간복잡도는 O(N * N)이다. 완전 탐색 시에, 네트워크가 정해진 컴퓨터는 방문하지 않도록 체크한다.
생각보다 간단한 문제이므로, BFS와 DFS 코드를 통해서 이해하면 된다.
## BFS
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
|
import java.util.*;
class Solution {
public int solution(int n, int[][] computers) {
int[] network = new int[computers.length];
int networkNum = 1;
for(int i = 0; i < computers.length; i++){
if(network[i] == 0){
Queue<Integer> q = new LinkedList<>();
q.add(i);
network[i] = networkNum;
while(!q.isEmpty()){
int cur = q.poll();
for(int next = 0; next < computers[cur].length; next++){
if(computers[cur][next] == 1 && network[next] == 0){
network[next] = 1;
q.add(next);
}
}
}
networkNum++;
}
}
return networkNum - 1;
}
}
|
## DFS
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
|
class Solution {
void dfs(int cur, int networkNum, int[][] computers, int[] network){
for(int i = 0; i < computers[cur].length; i++){
if(computers[cur][i] == 1 && network[i] == 0){
network[i] = networkNum;
dfs(i, networkNum, computers, network);
}
}
}
public int solution(int n, int[][] computers) {
int[] network = new int[computers.length];
int networkNum = 1;
for(int i = 0; i < computers.length; i++){
if(network[i] == 0){
network[i] = networkNum;
dfs(i, networkNum, computers, network);
networkNum++;
}
}
return networkNum - 1;
}
}
|
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 체육복(Greedy, Java, Lv1, 사고력) (0) | 2021.04.22 |
---|---|
[프로그래머스] 단속카메라(Java, Greedy, 사고력, Lv3) (0) | 2021.04.22 |
[프로그래머스] 광고 삽입(Java, Lv3, 카카오, 누적합) (0) | 2021.04.21 |
[프로그래머스] 단어 변환(Level 3, JAVA, 왜 BFS를 사용해야 하나?, BFS/DFS, 깊이 탐색, 너비 탐색) (0) | 2021.04.21 |
[2020 카카오 인턴십] 보석 쇼핑 (0) | 2020.09.09 |