[알고리즘]_[BeakJoon]- 1127. 연결 요소의 개수

SAPCO·2022년 11월 18일
0

📍 1. 문제

📍 2. 풀이

  1. 그래프 생성
  2. 모든 노드 각각 방문했는지 검사하며 방문하지 않았으면 해당 노드 탐색.
  3. 탐색할 때 마다 count++
  4. count 출력

📍 3. 코드

  1. 인접리스트 + DFS-Recursive
public class Main {
	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());
		int vertex = Integer.parseInt(st.nextToken());
		int edge = Integer.parseInt(st.nextToken());
		
		boolean[] visited = new boolean[vertex + 1];
		ArrayList<Integer>[] list = new ArrayList[vertex + 1];
		for(int i = 0; i < list.length; i++) {
			list[i] = new ArrayList<Integer>();
		}
		
		for(int i = 0; i < edge; i++) {
			st = new StringTokenizer(br.readLine());
			
			int v1 = Integer.parseInt(st.nextToken());
			int v2 = Integer.parseInt(st.nextToken());
			
			list[v1].add(v2);
			list[v2].add(v1);
		}
		
		int count = 0;
		for(int i = 1; i < list.length; i++) {
			if(visited[i] == false) {
				count++;
				dfsRecursive(i, list, visited);
			}
		}
		System.out.println(count);
		
	}
	
	public static void dfsRecursive(int vertex, ArrayList<Integer>[] list, boolean[] visited) {
		visited[vertex] = true;
		
		for(int e : list[vertex]) {
			if(visited[e] == false) {
				dfsRecursive(e, list, visited);
			}
		}
	}
}
profile
SAP CO

0개의 댓글