빙응의 공부 블로그
[BOJ S2][#DFS]11724번 연결 요소의 개수 본문
연결 요소의 개수 성공
문제
방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.
출력
첫째 줄에 연결 요소의 개수를 출력한다.
예제 입력 1 복사
6 5
1 2
2 5
5 1
3 4
4 6
예제 출력 1 복사
2
예제 입력 2 복사
6 8
1 2
2 5
5 1
3 4
4 6
5 4
2 4
2 3
예제 출력 2 복사
1
📝 풀이
여기서 연결 요소란 그래프의 갯수를 의미한다 즉 연결된 리스트들이 몇개인가를 의미한다.
간단한 DFS를 이용하여 구현이 가능하다.
import java.io.*;
import java.util.*;
public class Main {
static boolean[] visited;
static ArrayList<Integer>[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
visited = new boolean[n + 1];
arr = new ArrayList[n + 1];
// 연결 리스트 정의
for (int i = 1; i <= n; i++) {
arr[i] = new ArrayList<Integer>();
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
arr[a].add(b);
arr[b].add(a);
}
int count = 0;
for (int i = 1; i <= n; i++) {
if (!visited[i]) {
count++;
DFS(i);
}
}
System.out.println(count);
}
private static void DFS(int v) {
if (visited[v]) {
return;
}
visited[v] = true;
for (int i : arr[v]) {
if (!visited[i]) {
DFS(i);
}
}
}
}
'Argorithm' 카테고리의 다른 글
[BOJ G5][#투포인터, #회문]회문 (0) | 2024.07.11 |
---|---|
[BOJ S1][#DFS]1325번 효율적인 해킹 (0) | 2024.07.05 |
[BOJ S3][#DP]1904번 01타일 (0) | 2024.07.04 |
[BOJ S2][#자료구조]1406번 에디터 (0) | 2024.07.03 |
[BOJ S2][#그리디]1541번 잃어버린 괄호 (0) | 2024.07.03 |