728x90
코드 힌트:
- 그래프 탐색의 필요성:
- 각 컴퓨터를 노드로 보고, 컴퓨터 간의 연결을 간선으로 생각하면, 네트워크의 수를 찾는 문제는 그래프에서 연결 요소의 수를 찾는 문제로 볼 수 있습니다.
- 깊이 우선 탐색(DFS) 또는 너비 우선 탐색(BFS):
- 한 컴퓨터에서 시작해 연결된 모든 컴퓨터를 탐색하고, 이미 탐색한 컴퓨터는 다시 탐색하지 않도록 표시합니다.
- 새로운 컴퓨터에서 탐색을 시작할 때마다 새로운 네트워크가 하나 발견됩니다.
- 방문 여부를 기록하는 배열:
- 배열을 사용해 각 컴퓨터가 이미 탐색된 네트워크에 포함되어 있는지를 기록합니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution {
public int solution(int n, int[][] computers) {
int result = 0;
boolean[] visited = new boolean[n];
for (int i = 0; i < n; i++) {
if (!visited[i]) {
result++;
dfs(computers, visited, i); // DFS를 사용하여 연결된 모든 컴퓨터 방문
// bfs(computers, visited, i); // BFS를 사용하여 연결된 모든 컴퓨터 방문
}
}
return result;
}
// 깊이 우선 탐색 (DFS) 메서드
static void dfs(int[][] computers, boolean[] visited, int node) {
visited[node] = true;
for (int i = 0; i < computers.length; i++) {
if (i != node && !visited[i] && computers[node][i] == 1) {
dfs(computers, visited, i); // 재귀 호출을 통해 연결된 모든 컴퓨터 방문
}
}
}
// 너비 우선 탐색 (BFS) 메서드
static void bfs(int[][] computers, boolean[] visited, int node) {
visited[node] = true;
Queue<Integer> queue = new LinkedList<>();
queue.add(node);
while (!queue.isEmpty()) {
int currentNode = queue.poll();
for (int i = 0; i < visited.length; i++) {
if (currentNode != i && !visited[i] && computers[currentNode][i] == 1) {
visited[i] = true;
queue.add(i); // 큐에 추가하여 연결된 모든 컴퓨터 방문
}
}
}
}
}
주석 제거
import java.util.*;
class Solution {
public int solution(int n, int[][] computers) {
int result = 0;
boolean[] visited = new boolean[n];
for (int i = 0; i < n; i++) {
if (!visited[i]) {
result++;
dfs(computers, visited, i);
// bfs(computers, visited, i);
}
}
return result;
}
static void dfs(int[][] computers, boolean[] visited, int node) {
visited[node] = true;
for (int i = 0; i < computers.length; i++) {
if (i != node && !visited[i] && computers[node][i] == 1) {
dfs(computers, visited, i);
}
}
}
static void bfs(int[][] computers, boolean[] visited, int node) {
visited[node] = true;
Queue<Integer> queue = new LinkedList<>();
queue.add(node);
while (!queue.isEmpty()) {
int currentNode = queue.poll();
for (int i = 0; i < visited.length; i++) {
if (currentNode != i && !visited[i] && computers[currentNode][i] == 1) {
visited[i] = true;
queue.add(i);
}
}
}
}
}
728x90
'프로그래머스(Java) > Level 3' 카테고리의 다른 글
[프로그래머스] N으로 표현 (0) | 2024.08.21 |
---|---|
[프로그래머스] 야근 지수 (0) | 2024.08.19 |
[프로그래머스] 단어 변환 (0) | 2024.08.02 |
[프로그래머스] 정수 삼각형 (0) | 2024.07.18 |
[프로그래머스] 이중우선순위큐 (0) | 2024.07.16 |