ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • greedy
  • Arrays.sort()
  • git
  • dfs
  • java
  • sort
  • 코틀린
  • Android
  • kotiln
  • 깃허브
  • BFS
  • stack
  • getOrDefault
  • git bash
  • Queue
  • reactjs
  • 깃
  • Comparator
  • 해시
  • 백준
  • 프로그래머스 Lv.2
  • entrySet
  • HashMap
  • 안드로이드
  • 프로그래머스
  • PriorityQueue
  • React
  • DP
  • 스택/큐
  • compareTo()

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

Algorithm & Data Structure/백준

[JAVA] 백준 11724번 : 연결 요소의 개수

2020. 5. 23. 04:11
 

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

 

문제

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

 

입력

- 첫째 줄에 정점의 개수 N과 간선의 개수 M. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2)

- 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v. (1 ≤ u, v ≤ N, u ≠ v)

같은 간선은 한 번만 주어진다.

 

출력

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

 

풀이

 

의외로 간단하다. DFS나 BFS 알고리즘을 이용해서 연결되었는지 아닌지 확인하면 됨.

 

public class bj11724 {
	private static int n, m, v; 
	private static int[][] map; 
	private static boolean[] visit;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);
		
		n = s.nextInt(); // 정점의 개수
		m = s.nextInt(); // 간선의 개수
		
		map = new int[n+1][n+1]; 
		while(m-->0) {
			int x = s.nextInt();
			int y = s.nextInt();
			
			map[x][y]=map[y][x]=1;
		}
	
		int cnt=0; // 연결 요소의 개수
		visit = new boolean[n+1];
		for(int i=1;i<=n;i++) {
			if(!visit[i]) { // 방문한 적 없었을 때
				dfs(i);
				cnt++;
			}
		}

		System.out.println(cnt);
		
	}
	static void dfs(int s) {
		if(visit[s]) { // 이미 방문한 적 있으면
			return; // 넘어감
		}
		
		visit[s] = true; // 방문

		for(int i=1;i<=n;i++) {
			if(map[s][i] == 1) {
				dfs(i);
			}
		}
		
	}
	
}

'Algorithm & Data Structure > 백준' 카테고리의 다른 글

[JAVA] 백준 1260번 : DFS와 BFS  (0) 2020.05.23
[JAVA] 백준 1026번 : 보물  (0) 2020.05.22
[JAVA] 백준 1890번 : 점프  (0) 2020.05.22
[JAVA] 백준 3036번 : 링  (0) 2020.05.17
[JAVA] 백준 2609번 : 최대공약수와 최소공배수  (0) 2020.05.17
    'Algorithm & Data Structure/백준' 카테고리의 다른 글
    • [JAVA] 백준 1260번 : DFS와 BFS
    • [JAVA] 백준 1026번 : 보물
    • [JAVA] 백준 1890번 : 점프
    • [JAVA] 백준 3036번 : 링
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바