
문제 출처 : https://www.acmicpc.net/problem/11724
난이도 : 실버 2
무방향 그래프가 주어진다.
여기서 연결 요소(Connected Component) 의 개수를 구해야 한다.
visited 배열로 방문 여부를 관리한다.1 ~ N을 순회하면서:cnt)를 1 증가시킨다.import sys
input = sys.stdin.readline
from collections import deque
# 연결 요소의 개수 구하기
N, M = map(int,input().split())
# 완전탐색으로 BFS 돌며 cnt를 올리면 될 것 같다.
cnt = 0
graph = [
[] for _ in range(N+1)
]
visited = [False] * (N+1)
for _ in range(M):
u, v = map(int,input().split())
graph[u].append(v)
graph[v].append(u)
def BFS(start):
global cnt
queue = deque()
queue.append(start)
while queue:
node_index = queue.popleft()
visited[node_index] = True
for next_node_index in graph[node_index]:
if not visited[next_node_index]:
queue.append(next_node_index)
cnt += 1 # BFS 한번 다 돌면 cnt값 +1
for i in range(1,N+1):
if not visited[i]:
BFS(i)
print(cnt)
visited 배열에 방문처리 타이밍 을 popleft() 할 때 True로 해주었더니 시간초과가 났다.
popleft() 시점에 하면append) visited를 True로 바꾸는 것이다.import sys
input = sys.stdin.readline
from collections import deque
# 연결 요소의 개수 구하기
N, M = map(int,input().split())
# 완전탐색으로 BFS 돌며 cnt를 올리면 될 것 같다.
cnt = 0
graph = [
[] for _ in range(N+1)
]
visited = [False] * (N+1)
for _ in range(M):
u, v = map(int,input().split())
graph[u].append(v)
graph[v].append(u)
def BFS(start):
global cnt
queue = deque()
queue.append(start)
visited[start] = True
while queue:
node_index = queue.popleft()
# visited[node_index] = True 처음에 여기다가 방문 로직을 넣었는데, 그러면 중복 삽입이 가능해져서 시간초과가 난다. append할때 방문처리하자.
for next_node_index in graph[node_index]:
if not visited[next_node_index]:
queue.append(next_node_index)
visited[next_node_index] = True
cnt += 1 # BFS 한번 다 돌면 cnt값 +1
for i in range(1,N+1):
if not visited[i]:
BFS(i)
print(cnt)