문제
방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.
출력
첫째 줄에 연결 요소의 개수를 출력한다.
예제 입력 1
6 5
1 2
2 5
5 1
3 4
4 6
예제 출력 1
2
DFS를 이용한 풀이 (python)
#백준 11724 DFS
import sys
sys.setrecursionlimit(10000)
def dfs(start):
if(visited[start]):
return
visited[start] = True
for node in adj[start]:
if not visited[node]:
dfs(node)
N,M=map(int,input().split(' '))
adj = [ [] for _ in range(N+1)]
visited = [False] * (N+1)
cnt = 0
for _ in range(M):
x, y = map(int, input().split(' '))
adj[x].append(y)
adj[y].append(x)
for node in range(1, N+1):
if not visited[node]:
dfs(node)
cnt +=1
print(cnt)
BFS를 이용한 풀이 (python)
#백준 11724 BFS
from collections import deque
def bfs(start):
visited[start] = True
queue.append(start)
while queue:
x=queue.popleft()
for i in range(len(adj[x])):
y=adj[x][i]
if not visited[y]:
visited[y] = True
queue.append(y)
N,M=map(int,input().split(' '))
adj = [ [] for _ in range(N+1)]
visited = [False] * (N+1)
queue = deque()
cnt = 0
for _ in range(M):
x, y = map(int, input().split(' '))
adj[x].append(y)
adj[y].append(x)
for node in range(1,N+1):
if not visited[node]:
bfs(node)
cnt+=1
print(cnt)
대부분 DFS를 통해 구현하던데, 그 이유는 알겠다. BFS로 구현하는게 더 귀찮더라...ㅎㅎ
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 2110 공유기 설치 (이코테 Q29) - python (0) | 2022.01.18 |
---|---|
[이코테] ch7. 이진탐색 실전문제3 떡볶이 떡 자르기 (백준 2805) (0) | 2022.01.16 |
[백준] 1966. 프린터 큐 (0) | 2020.05.21 |
[프로그래머스] 정렬 문제풀이 2 - K번째 수 (0) | 2020.01.19 |
[프로그래머스] 정렬 문제풀이 1 - 가장 큰 수 (0) | 2020.01.19 |