[Python] 11724 - 연결 요소의 개수

2025. 1. 7. 22:49·Coding-Test/백준
728x90
반응형

 

1. 문제 정의

그래프가 주어졌을 때, 연결 요소 즉 트리의 갯수를 찾는 문제이다.

 

2. 풀이 방식

그래프의 탐색(DFS, BFS)을 이용하여 문제를 해결하였다. 

이전에 풀었던 그래프 탐색 문제를 참고하여 문제를 해결할 수 있었다.

 

1) 깊이 우선 탐색(DFS)

# 11724  연결 요소의 개수 (DFS)

import sys
sys.setrecursionlimit(100000)

input = sys.stdin.readline

N, M = map(int, input().split())

graph = [[] for _ in range(N+1)] # 그래프 초기화
visited = [False] * (N+1) # 방문 여부
count = 0 # 트리 탐색

for _ in range(M):
    a, b = map(int, input().split())
    graph[a] += [b] # a에 b 연결
    graph[b] += [a] # b에 a 연결 -> 양방향

# 깊이 우선 탐색(재귀 함수)
def dfs(start_v, visited):
    visited[start_v] = True

    for nx in graph[start_v]:
        if not (visited[nx]):
            dfs(nx, visited)

    return 1 # 트리 탐색을 마치면 1을 반환

for i in range(1, N+1):
    if not (visited[i]):
        count += dfs(i, visited)

print(count)

 

2) 넓이 우선 탐색(BFS)

# 11724  연결 요소의 개수 (BFS)

from collections import deque
import sys

input = sys.stdin.readline

N, M = map(int, input().split())

graph = [[] for _ in range(N+1)] # 그래프 초기화
visited = [False] * (N+1) # 방문 여부
count = 0 # 트리 탐색

for _ in range(M):
    a, b = map(int, input().split())
    graph[a] += [b] # a에 b 연결
    graph[b] += [a] # b에 a 연결 -> 양방향

# 넓이 우선 탐색
def bfs(start_v, visited):
    Q = deque([start_v])

    while Q:
        c = Q.popleft()

        for nx in graph[c]:
            if not (visited[nx]):
                visited[nx] = True
                Q.append(nx)

    return 1 # 트리 탐색을 마치면 1을 반환

for i in range(1, N+1):
    if not (visited[i]):
        count += bfs(i, visited)

print(count)

 

3. 후기

그래프 탐색 문제에 어느정도 개념이 잡힌 것 같다. BFS, DFS 둘 다 필요에 따라 사용할 수 있도록 최대한 두 가지 방법 모두를 활용하여 문제를 해결하려고 노력하고 있다.

728x90
반응형
저작자표시

'Coding-Test > 백준' 카테고리의 다른 글

[Python] 2776 - 암기왕  (0) 2025.01.13
[Python] 2630 - 색종이 만들기  (0) 2025.01.10
[Python] 1927 - 최소 힙  (0) 2025.01.06
[Python] 1012 - 유기농 배추  (0) 2025.01.04
[Python] 11726 - 2×n 타일링  (4) 2025.01.03
'Coding-Test/백준' 카테고리의 다른 글
  • [Python] 2776 - 암기왕
  • [Python] 2630 - 색종이 만들기
  • [Python] 1927 - 최소 힙
  • [Python] 1012 - 유기농 배추
희완
희완
희완한 코딩일상
    반응형
  • 희완
    Code-Heewan
    희완
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Python
        • 가상환경
      • Coding-Test
        • 백준
        • 프로그래머스
        • 항해99
      • Data-Analysis
      • 웹 개발
        • django
      • AWS
      • 공모전
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
희완
[Python] 11724 - 연결 요소의 개수
상단으로

티스토리툴바