오늘은 DFS 문제를 풀어봤다.
https://school.programmers.co.kr/learn/courses/30/lessons/43162
- 문제
컴퓨터(노드)가 직간접적으로 연결 된 것을 네트워크라 정의하고 네트워크의 수를 파악하는 문제. 총 컴퓨터 수 n과 연결정보가 2차원 인접배열로 제시된다. 단, 인접배열은 n번 컴퓨터가 배열안에선 n-1의 위치로 취급된다.
import java.util.*;
class Solution {
private static boolean[] visited; // 방문 체크용 boolean 배열
private static int answer;
private void dfs(int v, int[][] computers){
visited[v-1] = true; // 방문처리
for(int i=0; i<visited.length; i++){
// 아직 방문하지 않았고 간선정보에서 1로 연결되어있는 컴퓨터를 재귀로 방문
if(!visited[i] && computers[v-1][i]==1){
dfs(i+1, computers);
}
}
}
public int solution(int n, int[][] computers) {
answer = 0;
visited = new boolean[n]; // computers처럼 0번 안비우려고 n개만 만듬
for(int i = 0; i<n; i++){ // 1과 0으로 간선정보가 왔기때문에 그냥 for문 씀
if(!visited[i]) { // index i 가 방문안했으면 i+1번 컴퓨터 dfs방
dfs(i+1, computers);
answer++; // 네트워크 하나를 다 순회했으므로 개수를 1씩 증가
}
}
return answer;
}
}