728x90
๐ ๋ฐฑ์ค 11724 - ์ฐ๊ฒฐ ์์์ ๊ฐ์
๐ก ๋์ ํ์ด
์ด๋ฒ ๋ฌธ์ ๋ BFS์ DFS๋ฅผ ์ด์ฉํด์ ํ์๋๋ฐ ์๊ฐ ์ฐจ์ด๊ฐ ๋ง์ด ๋์ง ์์๋ค.(๊ทผ์ํ๊ฒ dfs
๊ฐ 48m/s
์ ๋ ๋นจ๋๋ค.)
728x90
๋ฐฉํฅ ๊ทธ๋ํ๊ฐ ์์ ๋๋ ๊ฐ๋จํ๊ฒ ์
๋ ฅ๊ฐ์ ๋ฐ๋๋ก ๋ฐ๊ฟ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ์ดํ์ ๋ช ๋ฒ ๋
ธ๋๋ผ๋ฆฌ ์ด์ด์ก๋์ง๋ฅผ graph
์ ์
๋ ฅํ๋ฉด ๋๋๋ฐ ๋ฌด ๋ฐฉํฅ ๊ทธ๋ํ๊ธฐ๋๋ฌธ์ ์์๊ฐ ๋ฐ๋์ด๋ ๋๋ค. ์์ ์
๋ ฅ1์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ค. graph
์ index
๊ฐ ๋
ธ๋์ด๋ค.
from collections import deque
import sys
input = sys.stdin.readline
def bfs(graph, start, visited): # BFS implementation
queue = deque([start])
visited[start] = True
while queue:
v = queue.popleft()
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
N, M = map(int, input().split())
graph = [[] for _ in range(N + 1)]
visited = [False] * (N + 1)
for i in range(M):
node1, node2 = map(int, input().split())
graph[node2].append(node1)
graph[node1].append(node2)
cnt = 0
for i in range(1, N+1): # check each node
if not visited[i]:
bfs(graph, i, visited)
cnt += 1
print(cnt)
๋ฐ์ํ
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2606 - ๋ฐ์ด๋ฌ์ค(DFS) (0) | 2021.04.19 |
---|---|
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 11724 - ์ฐ๊ฒฐ ์์์ ๊ฐ์(DFS) (0) | 2021.04.19 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2468 - ์์ ์์ญ (0) | 2021.04.19 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2331 - ๋ฐ๋ณต์์ด (0) | 2021.04.17 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2667 - ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2021.04.16 |
๋๊ธ