새소식

Algorithm/BOJ

(JAVA) [BOJ]백준 11724번, 연결 요소의 개수

  • -
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

11724, 연결 요소의 개수

이번 문제는 그래프 이론 DFS 를 사용해서 풀어보겠다.

 

Process

main

: 정점의 개수와 간선의 개수가 주어진다. 정점의 개수만큼 ArrayList 를 만들어주고 양방향 간선을 표시해주면 된다.

 

N = scan.nextInt();
M = scan.nextInt();
adj = new ArrayList[N+1];
visit = new boolean[N+1];

for(int i=1; i<=N; i++) adj[i] = new ArrayList<>();

for(int i=1; i<=M; i++)
{
    int x = scan.nextInt();
    int y = scan.nextInt();
    // 양방향
    adj[x].add(y);
    adj[y].add(x);
}

 

순회

: 1 - N 까지 순회하며 방문하지 않은 정점에 dfs 를 호출해주며, 호출할 때마다 ans 의 카운트를 더해간다.

static void pro() 
{
    int ans = 0;

    for(int i=1; i<=N; i++)
    {
        if(visit[i]) continue;
        dfs(i);
        ans++;
    }
    System.out.println(ans);
}

dfs

: 방문에 대한 처리는 선행하기 때문에 들어온 x 좌표에 대한 방문을 처리해주고 ArrayList (adj) 와 연결되어 있는 모든 정점을 순회하며 방문처리를 진행한다.

static void dfs(int x)
{
    visit[x] = true;

    for(int k : adj[x])
    {
        if(visit[k]) continue;

        dfs(k);
    }
}

 

전체 코드

static int N, M;
static ArrayList<Integer>[] adj;
static boolean[] visit;

static void input() 
{
   N = scan.nextInt();
   M = scan.nextInt();
   adj = new ArrayList[N+1];
   visit = new boolean[N+1];

   for(int i=1; i<=N; i++) adj[i] = new ArrayList<>();

   for(int i=1; i<=M; i++)
   {
        int x = scan.nextInt();
        int y = scan.nextInt();
        // 양방향
        adj[x].add(y);
        adj[y].add(x);
   }
}

static void pro() 
{
    int ans = 0;

    for(int i=1; i<=N; i++)
    {
        if(visit[i]) continue;
        dfs(i);
        ans++;
    }
    System.out.println(ans);
}

static void dfs(int x)
{
    visit[x] = true;

    for(int k : adj[x])
    {
        if(visit[k]) continue;

        dfs(k);
    }
}

public static void main(String[] args) 
{
    input();
    pro();
}
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.