[Python, 백준/11724번] 연결 요소의 개수

2024. 9. 24. 17:48·코테/백준


☑️ [Python, 백준/11724번] 연결 요소의 개수

1️⃣ 문제

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

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

 

2️⃣ 접근

그래프 문제들은 예제 입력의 경우, 숫자로 전달하기 때문에 입력 값 설명을 유심히 봐야한다. 대부분 형태가 Vertex Count와 Edge Count 그리고 다음 줄에는 Edge Data를 전달하지만 이렇게 문자를 보는 것은 머릿속에서 쉽게 떠올리기 힘들다.

 

그래서 일단 그릴 수 있다면 그려본다. 예제 입력 1에 있는 데이터를 시각화 한다면, 다음과 같은 그래프가 나온다.

 

시각적으로 그려보면 출력 값이 2라는 사실을 직관적으로 알 수 있다. 그리고 연결 되었다는 것은 단절된 부분 그래프의 수와 동일핟단 점을 캐치 할 수 있다. 그러면 이제 DFS를 통해서 모든 노드를 순회하면 된다.

 

순회는 2가지만 생각하면 된다. 첫번째로 모든 노드를 순회하기 위해서 정점 집합 데이터를 돌리는 것, 두번째로는 한 노드를 가지고 해당 노드와 인접한 노드가 있는지 확인하는 순회다. 이전 블로그 게시글에서는 이를 DFS 함수와 DFS_VISIT 함수로 나눴다.

 

[알고리즘] DFS, BFS

참고 서적 : Introduction to Algorithms🖐️ [알고리즘] DFS, BFSDFS, BFS는 완전 탐색 알고리즘으로 모든 Node를 탐색하는 알고리즘이다. 정글 1주차에서 개념을 자세하게 알고 사용했던 알고리즘은 아니

taeyeokim.tistory.com

 

DFS 함수에서는 방문 처리가 True인 노드는 순회되었다고 생각하고 False인 노드들에 한해서만 순회한다. 첫번째 순서를 제외하고 다음으로 해당 IF문에 진입할 수 있는 노드가 있다면 이전 처리에서 모든 Node를 방문하지 못했다는 소리가 되며, 첫번째 탐색한 노드로 모든 노드를 순회할 수 없음을 알 수 있다.

 

그렇기 때문에 DFS 함수의 IF문 안에서 Sum 변수를 선언해서 값을 증가시켜서 해결했다.

 

3️⃣ 코드

import sys
sys.setrecursionlimit(10**6)

n_count, e_count = map(int, sys.stdin.readline().split())

graph = [[0]*(n_count+1) for _ in range(n_count+1)]
for i in range (e_count):
    a,b = map(int, sys.stdin.readline().split())
    graph[a][b] = graph[b][a] = 1
    
visit = [False] * (n_count + 1)
sum = 0

def dfs() -> int:
    global sum
    for i in range(1, len(graph)):
        for j in range(1, len(graph[i])):
            if visit[j] == False:
                dfs_visit(j)
                sum += 1
    return sum
                
def dfs_visit(node):
    visit[node] = True
    
    for i in range(len(graph[node])):
        if graph[node][i] == 1 and visit[i] == False:
            dfs_visit(i)
            
if __name__ == '__main__':
    print(dfs())

'코테 > 백준' 카테고리의 다른 글

[Python, 백준/21606번] 아침 산책  (0) 2024.10.07
[Python, 백준/11725번] 트리의 부모 찾기  (1) 2024.09.24
[Python, 백준/2606번] 바이러스  (2) 2024.09.24
[Python, 백준/1260번] DFS와 BFS  (0) 2024.09.21
[Python, 백준/1991번] 트리 순회  (2) 2024.09.19
'코테/백준' 카테고리의 다른 글
  • [Python, 백준/11725번] 트리의 부모 찾기
  • [Python, 백준/2606번] 바이러스
  • [Python, 백준/1260번] DFS와 BFS
  • [Python, 백준/1991번] 트리 순회
태역
태역
  • 태역
    RYULAB
    태역
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 언어
        • C
        • C++
        • C#
      • 엔진, 프레임워크
        • Unity
        • Unreal
        • Electron
      • 공부 N
        • 디자인 패턴
        • 수학
        • CS
        • Git
        • 알고리즘 N
        • 자료구조
      • 코테
        • 프로그래머스
        • 백준
      • 독서
        • Effective C#
        • CLR via C#
        • 뇌를 자극하는 윈도우즈 시스템 프로그래밍
        • 오브젝트
        • CSAPP
        • OSTEP
      • 프로젝트
        • Unity
      • 개발 일지
        • 퓨처리티
        • 골든타임
      • 활동
        • 게임잼 후기
        • 게임제작동아리 브릿지
        • 크래프톤 정글
        • 기타
      • 기타
  • 블로그 메뉴

    • 링크

    • 공지사항

      • 2024 04 17
    • 인기 글

    • 태그

      티스토리챌린지
      인프런 #인프런강의후기 #게임개발 #게임개발강의 #인강후기 #강의후기 #게임개발자 #인프런강의
      오블완
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    태역
    [Python, 백준/11724번] 연결 요소의 개수
    상단으로

    티스토리툴바