[ BOJ 11724 ] 연결 요소의 개수 (Python)

uoayop·2021년 2월 21일
0

알고리즘 문제

목록 보기
1/103
post-thumbnail

문제

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

방향 없는 그래프가 주어졌을 때, 연결 요소의 개수를 구하는 쉬운 문제이다.
DFS의 기본 개념을 이해하고 푼다면 쉽게 풀 수 있다.


문제 풀이

  1. 우선 그래프를 딕셔너리로 만들어주고, 양방향으로 연결해준다.
    ( ** 방향 없는 그래프이기 때문에, 양방향으로 연결해준 것 )

  2. dfs 함수를 통해 해당 정점과 연결된 모든 정점들을 방문해줄 것이다. 이때 방문 체크를 해준다.

  3. 더 이상 연결된 정점이 없으면 1을 리턴해서 cnt 변수에 더해준다.

  4. for문을 통해, 방문하지 않은 정점만 dfs 함수에 들어가도록 해준다.


코드

import sys
input = sys.stdin.readline

n, m = map(int,input().rstrip().rsplit())
graph, visited = {}, [0]*(n+1)
cnt = 0

for _ in range(m):
    u,v = map(int,input().rstrip().rsplit())
    if u not in graph:
        graph[u] = [v]
    else:
        graph[u].append(v)

    if v not in graph:
        graph[v] = [u]
    else:
        graph[v].append(u)

def dfs(u):
    visited[u] = 1
    if u in graph:
        for v in graph[u]:
            if visited[v] == 0:
                dfs(v)

    return 1

for i in range(1,n+1):
    if visited[i] == 0:
        cnt += dfs(i)

print(cnt)
profile
slow and steady wins the race 🐢

0개의 댓글