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

ChoRong0824·2023년 7월 13일
0

백준

목록 보기
9/14

DFS 학습중에 입력 예제에 대한 포스팅이 제대로 확인되지 않았습니다.
어떤 식으로 문제를 접하고 있는지에 대해, 어떻게 접근해야 하는지에 대해
자바로 자세하게 설명해주시는 분이 없어서 이렇게 작성하게되었습니다.
(아마, 필자가 서칭 실력이 허접이라 그런 것일겁니다.ㅠㅠ)
모르시거나, 이해 안되시면 댓글 및 메일 남겨주시면 상세히 도움드리겠습니다.

링크 : https://www.acmicpc.net/problem/11724

설명

입력 보실 필요 없습니다.(농담)

6 5
1 2
2 5
5 1
3 4
4 6

이렇게 입력이 된다는 것은
6 -> 노드
5 -> 간선

보통 무방향성 간선으로 노드를 도식화 하는 그림을 많이 보셨을 것입니다.
이렇게 그리는 것은 정말 좋은 방법입니다.
그러나, 필자는 필자만의 방식을 생각해냈습니다.
인접 배열(리스트)를 그냥 단방향으로 표시해도 되는거 아닌가? 라는 생각입니다.
어차피 간선이 연결되어 있다면, 인접 리스트인 것입니다.
따라서 필자는 해당 입력 예시가 큰 수가 아니라면,
이해하기 편하게 단방향 간선으로 도식화를 도와드리겠습니다.

(1)
1 -> 2 
^   /
|    
5

(2)
3->4->6

입력예제 2번

6 8
1 2
2 5
5 1
3 4
4 6
5 4
2 4
2 3

6-> 노드
8-> 간선

1  ->  2 ->3
|      |  /
5  ->   4  -> 6

코드

import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;

class Main{
    static ArrayList<Integer>[] arr;
    static boolean[] visited;
    static int count;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        arr = new ArrayList[N + 1];
        visited = new boolean[N + 1];
        for (int i = 1; i < N + 1; i++) {
            arr[i] = new ArrayList<Integer>();
        }
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int u = Integer.parseInt(st.nextToken());
            int v = Integer.parseInt(st.nextToken());
            arr[u].add(v);
            arr[v].add(u);
        }
        for (int i = 1; i < N + 1; i++) {
            if (!visited[i]) {
                count++;
                DFS(i);
            }
        }
        System.out.print(count);
    }

    static void DFS(int node) {
        if (visited[node]) {
            return;
        }
        visited[node] = true;
        for (int i : arr[node]) {
            if (visited[i] == false) {
                DFS(i);
            }
        }
    }
}
profile
백엔드를 지향하며, 컴퓨터공학과를 졸업한 취준생입니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글