728x90
문제 이해
- 이 문제는 DFS(깊이 우선 탐색)을 사용해 1번 노드와 연결된 모든 노드의 개수를 찾는 문제입니다.
- 주어진 그래프는 무방향 그래프입니다. 즉, 노드 A와 B가 연결되어 있으면 A → B와 B → A로 이동할 수 있습니다.
핵심 아이디어
- DFS(깊이 우선 탐색):
- DFS는 재귀 호출을 사용해 그래프를 깊이 있게 탐색합니다.
- 방문한 노드를 추적하며 이미 방문한 노드를 다시 탐색하지 않도록 해야 합니다.
- 인접 리스트 사용:
- 그래프를 인접 리스트로 구현합니다. 각 노드는 연결된 노드들의 리스트를 가집니다.
- 방문 배열 활용:
- 중복 방문을 방지하기 위해 visit[] 배열을 사용합니다.
- 탐색 중 방문하지 않은 노드만 재귀적으로 탐색합니다.
알고리즘 흐름
- 입력 받기:
- 노드와 간선의 개수를 입력받습니다.
- 각 간선의 정보를 입력받아 그래프(인접 리스트)를 구성합니다.
- DFS 탐색 시작:
- 1번 노드에서 출발하며, 방문한 노드를 count 변수로 추적합니다.
- DFS 탐색 종료 후 결과 출력:
- 1번 노드와 연결된 모든 노드의 개수를 출력합니다.
정답은 더보기 클릭
더보기
import java.util.*; // Scanner와 List 사용을 위한 라이브러리
class Main {
// 그래프를 인접 리스트로 표현 (각 노드의 연결된 노드를 저장)
static List<Integer>[] graph;
static int count = 0; // 방문한 노드 수를 세기 위한 변수
static boolean[] visit; // 방문 여부를 체크할 배열
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 노드의 개수 입력
int n = in.nextInt();
in.nextLine();
// 간선의 개수 입력
int link = in.nextInt();
in.nextLine();
// 그래프 초기화 (노드는 1부터 시작하므로 n+1 크기로 생성)
graph = new ArrayList[n + 1];
visit = new boolean[n + 1]; // 방문 여부 배열 초기화
// 각 노드에 해당하는 ArrayList 초기화
for (int i = 0; i <= n; i++) {
graph[i] = new ArrayList<>();
}
// 간선 정보 입력받기 (노드 간의 연결 정보)
for (int i = 0; i < link; i++) {
String[] tmp = in.nextLine().split(" "); // 간선 정보 입력
int node1 = Integer.parseInt(tmp[0]);
int node2 = Integer.parseInt(tmp[1]);
// 무방향 그래프이므로 양쪽 노드에 서로를 추가
graph[node1].add(node2);
graph[node2].add(node1);
}
// 시작 노드(1번)를 방문 처리하고 DFS 탐색 시작
visit[1] = true;
dfs(1);
// 1번 노드와 연결된 노드의 개수 출력
System.out.println(count);
}
// DFS(깊이 우선 탐색) 함수
public static void dfs(int curNode) {
// 현재 노드와 연결된 모든 노드를 탐색
for (int i = 0; i < graph[curNode].size(); i++) {
int nextNode = graph[curNode].get(i); // 다음 노드 가져오기
// 다음 노드가 방문되지 않았다면 탐색 수행
if (!visit[nextNode]) {
visit[nextNode] = true; // 방문 처리
dfs(nextNode); // 다음 노드로 재귀 호출
count++; // 방문한 노드 수 증가
}
}
}
}
728x90
'백준' 카테고리의 다른 글
[백준] AC (5430번) (7) | 2024.10.23 |
---|---|
[백준] 미세먼지 안녕! (17144번) (5) | 2024.10.22 |
[백준] 미로 탐색 (2178번) (1) | 2024.10.22 |
[백준] 두 용액 (2470번) (0) | 2024.10.21 |
[백준] N과 M (1) (15649번) (0) | 2024.10.21 |