728x90
https://www.acmicpc.net/problem/11724
11724번: 연결 요소의 개수
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주
www.acmicpc.net
각 노드가 몇 개나 연결되었는지 구하면 되는 문제다
그래서 난 DFS를 활용해서 풀었다
약간 고민했던 점은 dfs를 호출할 떄마다 answer++ 를 하면 각각 나눠진 영역의 개수를 구하게 된다
그래서 연결된 요소들의 개수를 구하기 위해 dfs가 호출되고 visited의 수가 바뀔때마다 answer를 증가해야할 줄 알았는데?!
아니었네..
그냥 호출될 때마다 answer를 키워주면 된다
쉽..쉽네..
아래는 코드!
자바 코드)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
static boolean[] visited;
static List<List<Integer>> arr = new ArrayList<>();
static Integer answer;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
answer = 0;
visited = new boolean[n+1];
for(int i=0;i<=n;i++) {
arr.add(new ArrayList<>());
}
for(int i=0;i<m;i++) {
int a = scanner.nextInt();
int b = scanner.nextInt();
arr.get(a).add(b);
arr.get(b).add(a);
}
for(int i=1;i<=n;i++) {
if(!visited[i]) {
dfs(i);
answer++;
}
}
System.out.println(answer);
}
static public void dfs(int x) {
visited[x] = true;
for(int num : arr.get(x)) {
if(!visited[num]) {
dfs(num);
}
}
}
}
728x90
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 2751번 - 수 정렬하기 2 (0) | 2022.09.28 |
---|---|
[백준] 1451. 직사각형으로 나누기 - JAVA (1) | 2022.09.26 |
[JAVA] 백준 2179번 - 비슷한 단어 (0) | 2022.05.06 |
[JAVA] 백준 9095번 - 1, 2, 3 더하기 (0) | 2022.05.04 |
[그리디] 백준 11399번 ATM (0) | 2022.02.28 |
댓글