본문 바로가기
Problem Solving/DFS, BFS

[DFS, BFS] 백준 11724번: 연결 요소의 개수

by ggyongi 2021. 5. 29.
반응형

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

import collections
n, m = map(int, input().split())

graph = collections.defaultdict(list)
for i in range(m):
    u,v = map(int, input().split())
    graph[u].append(v)
    graph[v].append(u)

discovered = []
count = 0

def dfs(node):
    discovered.append(node)
    lst = graph[node]
    for i in range(len(lst)):
        next = lst[i]
        if next not in discovered:
            dfs(next)

for i in range(1,n+1):
    if i not in discovered:
        count += 1
        dfs(i)
print(count)

아주 기본적인 dfs 문제다.

나는 재귀구조를 쓸 때 보통 중단 조건을 만들기 때문에 아래 코드가 좀 더 익숙한 거 같다.

import collections
n, m = map(int, input().split())

graph = collections.defaultdict(list)
for i in range(m):
    u,v = map(int, input().split())
    graph[u].append(v)
    graph[v].append(u)

discovered = []
count = 0

def dfs(node):
    if node in discovered:
        return
    discovered.append(node)
    lst = graph[node]
    for i in range(len(lst)):
        next = lst[i]
        dfs(next)

for i in range(1,n+1):
    if i not in discovered:
        count += 1
        dfs(i)
print(count)
 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글