[백준] 11724 연결 요소의 개수(Silver.2) - DFS

2024. 8. 11. 17:54·코딩 테스트/알고리즘

문제

코드

연결 요소(연결된 컴포넌트(서브그래프)) 찾기 유형의 문제다.

DFS를 이용하여 서브 그래프를 찾아내고 찾아낸 서브 그래프의 개수를 출력하는 간단한 문제이다.

같은 유형의 문제(유기농 배추)

  • 풀이 방법
  1. 아래 사진과 같이 LinkedList<Integer>[]로 노드를 만들고 연결 리스트 형태로 그래프를 구현한다.
  2. 방문하지 않은 노드에 대해 dfs를 실행하여 서브 그래프 개수를 카운팅한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class _11724 {
    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()); // 정점(Node)의 개수
        int M = Integer.parseInt(st.nextToken()); // 간선(Edge)의 개수

        // ---------- 1 ----------
        LinkedList<Integer>[] list = new LinkedList[N + 1];
        for (int i = 1; i <= N; i++) {
            list[i] = new LinkedList<>();
        }
        boolean[] visited = new boolean[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());
            // 무방향 그래프일 경우 양방향 간선 처리를 해야 함 
            list[a].add(b);
            list[b].add(a);
        }

        // ---------- 2 ----------
        int cnt = 0;
        for (int i = 1; i <= N; i++) {
            if (!visited[i]){
                dfs(list, visited, i);
                cnt++;
            }
        }
        System.out.println(cnt);
    }

    public static void dfs(LinkedList<Integer>[] list, boolean[] visited, int nowIdx) {
        visited[nowIdx] = true;

        for (int neighbor : list[nowIdx]) {
            if (!visited[neighbor])
                dfs(list, visited, neighbor);
        }
    }
}

'코딩 테스트 > 알고리즘' 카테고리의 다른 글

[백준] 4963 섬의 개수(Silver.2) - DFS  (0) 2024.08.13
[백준] 11725 트리의 부모 찾기(Silver.2) - DFS  (0) 2024.08.12
[백준] 1012 유기농 배추(Silver.2) - DFS  (0) 2024.08.11
[백준] 14226 이모티콘(Gold.4) - BFS  (0) 2024.08.09
[백준] 17086 아기 상어2(Silver.2) - BFS  (0) 2024.08.08
'코딩 테스트/알고리즘' 카테고리의 다른 글
  • [백준] 4963 섬의 개수(Silver.2) - DFS
  • [백준] 11725 트리의 부모 찾기(Silver.2) - DFS
  • [백준] 1012 유기농 배추(Silver.2) - DFS
  • [백준] 14226 이모티콘(Gold.4) - BFS
토자맨
토자맨
  • 토자맨
    개발하는 토자맨
    토자맨
  • 전체
    오늘
    어제
    • 개발 공부
      • 코딩 테스트
        • 코드업 기초 100제
        • 백준
        • 99클럽
        • 자료구조
        • 알고리즘
      • Programming Language
        • 자바(JAVA)
      • Back-end
        • Spring
      • Front-end
        • html
        • css
      • DevOps
        • AWS
        • CI CD
        • Docker
        • 홈서버
        • Git
      • Computer Science
        • 자료구조
        • 알고리즘
        • 운영체제
        • OS,Network,DB,DesignPattern
      • 프로젝트
        • 웨이트 쇼핑몰
      • 공부 로드맵
        • 2학년 겨울방학
        • 3학년 2학기
        • 3학년 겨울방학
      • 일상
        • 기타 정보
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dfs #알고리즘
    피보나치 수 #백준 #dp
    프로그래머스 #dp
    bfs #프로그래머스
    싱글톤 패턴 #싱글톤 컨테이너 #싱글톤 레지스트리 #싱글톤 객체 상태 #무상태 #stateless #유지상태 #staleful
    dp #백준 #동적계획법
    백준 #dfs #11725번
    백준 #dp #동적계획법
    99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #til
    dfs #백준
    bfs #백준
    ec2 멈춤 #ec2 터짐 #ec2 ssh 연결 끊김 #ec2 끊김
    백준 #dfs
    오블완
    프로그래머스 #dfs
    티스토리챌린지
    백준 #dfs #알고리즘
    백준 #이진탐색 #이분탐색
    스프링핵심원리 #김영한 #의존관계자동주입 #의존관계 자동 주입
    이진탐색 #이분탐색 #백준
    solid #객체지향설계원칙
    git filter-repo
    bfs #최단거리탐색 #프로그래머스
    스프링 #spring #스프링 컨테이너 #스프링 컨텍스트
    nvidia-docker #docker cuda #docker gpu #엔비디아 도커
    백준 #아기상어2 #bfs
    nvidia container toolkit #
    백준 #bfs
    git filter-branch #commit 수정 #commit
    이진탐색 #이분탐색 #알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
토자맨
[백준] 11724 연결 요소의 개수(Silver.2) - DFS
상단으로

티스토리툴바