T_era
[JAVA] dfs : 네트워크 본문
1. 문제 내용

요약
n개의 컴퓨터가 있고, n개의 컴퓨터가 제각각 연결되어있을 때 총 네트워크망의 개수를 구해라
2. 접근 방법
탐색 한번에 연결되있는 모든 컴퓨터를 찾고 탐색이 되지않은 컴퓨터가 있을 때 탐색을 또 하는 방식으로 하면 될 것으로 생각되서 적합한 DFS를 사용했다
3. 구현 과정
public void dfs(int n, int[][] arr, boolean[] visible, int index){
if(!visible[index]) {
visible[index] = true;
for (int i = 0; i < n; i++) {
if(arr[index][i] == 1) dfs(n, arr, visible, i);
}
}
}
visible을 통해 탐색기록을 저장면서 최초탐색의 경우 연결된 컴퓨터를 다시 탐색한다
public int solution(int n, int[][] computers) {
int count = 0;
boolean[] visible = new boolean[computers.length];
for(int i = 0; i < n; i++){
if(!visible[i]){
count++;
dfs(n, computers, visible, i);
}
}
return count;
}
탐색을 지시할 땐 방문기록을 기준으로 탐색한다
4. 결과

전체 코드
class Solution {
public int solution(int n, int[][] computers) {
int count = 0;
boolean[] visible = new boolean[computers.length];
for(int i = 0; i < n; i++){
if(!visible[i]){
count++;
dfs(n, computers, visible, i);
}
}
return count;
}
public void dfs(int n, int[][] arr, boolean[] visible, int index){
if(!visible[index]) {
visible[index] = true;
for (int i = 0; i < n; i++) {
if(arr[index][i] == 1) dfs(n, arr, visible, i);
}
}
}
}
'Programing > Programers' 카테고리의 다른 글
| [JAVA] bfs : 게임 맵 최단거리 (1) | 2025.04.28 |
|---|---|
| [JAVA] DP : 연속 펄스 부분 수열의 합 (0) | 2025.04.25 |
| [JAVA] DFS(깊이우선탐색) : 타겟넘버 (0) | 2025.04.23 |
| [JAVA] 완전탐색 : 피로도 (0) | 2025.04.23 |
| [JAVA] 완전 탐색 : 카펫 (0) | 2025.04.23 |