[Java] 백준 11724번

박세윤·2022년 7월 10일
0

BaekJoon Online Judge

목록 보기
68/95
post-thumbnail

백준 11724번

연결 요소의 개수

문제

방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.

출력

첫째 줄에 연결 요소의 개수를 출력한다.

예제

알고리즘 분류

  • 그래프 이론
  • 그래프 탐색
  • 너비 우선 탐색
  • 깊이 우선 탐색

코드

import java.util.*;
import java.io.*;

public class Main {
	public static int graph[][];
	public static int N;
	public static int M;
	
	public static boolean visited[];
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		
		graph = new int[N+1][N+1];
		
		for(int i=0; i<M; i++) {
			st = new StringTokenizer(br.readLine());
			
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			
			graph[a][b] = 1;
			graph[b][a] = 1;
		}
		
		visited = new boolean[N+1];
		
		int count = 0;
		
		for(int i=1; i<N+1; i++) {
			if(!visited[i]) {
				DFS(i);
				count++;
			}
		}
		
		System.out.println(count);
	}
	
	public static void DFS(int index) {
		visited[start] = true;
		
		for(int i=1; i<=N; i++) {
			if(graph[index][i] == 1 && !visited[i])
				DFS(i);
		}
	}
}

풀이

DFS를 활용하여 문제를 해결했다. visited 배열을 활용하여 이전에 방문했는지 여부를 따진다.

profile
개발 공부!

0개의 댓글