![[DFS] 백준 11724번 : 연결 요소의 개수 - Java](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLccO4%2FbtsN6oqZKVY%2FelwJnlTIqxjoEJbemFY9P1%2Fimg.png)
[DFS] 백준 11724번 : 연결 요소의 개수 - Java백준/BFS & DFS2025. 5. 21. 00:53
Table of Contents
https://www.acmicpc.net/problem/2606
이번 문제는 위의 문제와 거의 같다. (풀이 참고 : https://kimjunhyun.tistory.com/134)
✅ 문제
https://www.acmicpc.net/problem/11724
접근방법
1. 연결된 요소의 개수 -> DFS / BFS
2. 서로 연결되었다는 정보를 어떻게 하나의 자료구조로 통합할까?
3. 이미 방문한 지점을 다시 방문하지 않으려면 어떤 자료구조를 사용해야할까?
4. 어디에서 DFS를 시작할 것인가?
🔑 풀이
import java.io.*;
import java.util.*;
// DFS
public class Main {
final static int MAX = 1000 + 10; // N이 가질 수 있는 최댓값
static boolean[][] graph;
static boolean[] visited; // 재방문 방지 배열
static int N, M;
static int answer;
static StringBuilder sb = new StringBuilder();
static void dfs(int idx) {
visited[idx] = true;
for (int i = 1; i <= N ; i++) {
if(!visited[i] && graph[idx][i])
dfs(i);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
// 1. graph에 연결 정보 채우기
graph = new boolean[MAX][MAX];
visited = new boolean[MAX];
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
graph[u][v] = true;
graph[v][u] = true;
}
// 2. dfs(재귀함수 호출)
for (int i = 1; i <= N; i++) {
if(!visited[i]) {
dfs(i);
answer++;
}
}
// 3. 출력
bw.write(String.valueOf(answer));
bw.close();
br.close();
}
}
'백준 > BFS & DFS' 카테고리의 다른 글
[DFS] 백준 24479번 : 알고리즘 수업 - 깊이 우선 탐색1 - Java (0) | 2025.05.21 |
---|---|
[DFS] 백준 2606번 : 바이러스 - Java (1) | 2025.05.19 |
99클럽 코테 스터디 4일차 TIL - 백준 2468번 : 안전 영역 (0) | 2025.04.04 |
[BFS] 백준 14502번 : 연구소 - Java (0) | 2025.02.24 |
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!