// [input]
n (1 ≤ n ≤ 200) : 컴퓨터의 개수
computers (n × n 배열): 연결된 컴퓨터들에 대한 정보. (1: 연결)
class Solution {
public int solution(int n, int[][] computers) {
int answer = 0;
boolean[] visited = new boolean[n];
for (int i = 0; i < n; i++) {
if (!visited[i]) { // 아직 방문하지 않은 컴퓨터면
answer++; // 네트워크 개수 추가
dfs(i, visited, computers, n); // 연결된 모든 컴퓨터 찾기
}
}
return answer;
}
// dfs: 연결된 컴퓨터 방문 처리
void dfs(int current, boolean[] visited, int[][] computers, int n) {
visited[current] = true; // 현재 컴퓨터 방문 처리
// 현재 컴퓨터와 연결된 다른 컴퓨터 체크
for (int i = 0; i < n; i++) {
if (computers[current][i] == 1 && !visited[i]) {
dfs(i, visited, computers, n); // 그 컴퓨터로 이동 -> 다시 연결 확인
}
}
}
}
O(n^2) (n: 컴퓨터 수)O(n)에 가까운 시간 복잡도로 해결할 수 있으며, 트리 구조로 연결을 관리하기 때문에 탐색 속도가 빠름.이 코드에서 잘못된 부분이나 개선할 점이 있다면 언제든지 댓글로 알려주세요.
알고리즘을 작성하면서 더 좋은 코드를 만들 수 있도록 도와주시면 정말 감사하겠습니다! 🙂