BOJ: ์ฐ๊ฒฐ ์์์ ๊ฐ์ - 1475๋ฒ
๋ฌธ์
๋ฐฉํฅ ์๋ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฐ๊ฒฐ ์์ (Connected Component)์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ด๊ฐ ์์ฑํ ์ฝ๋
# https://www.acmicpc.net/problem/11724
# ์ฐ๊ฒฐ ์์์ ๊ฐ์
import sys
def bfs(start_v):
discovered = [start_v]
queue = [start_v]
while queue:
x = queue.pop(0)
if x in graph:
for w in graph[x]:
if w not in discovered:
discovered.append(w)
queue.append(w)
return discovered
n, m = map(int, sys.stdin.readline().split())
graph = dict()
for _ in range(m):
u, v = map(int, sys.stdin.readline().split())
if u in graph:
graph[u].append(v)
else:
graph[u] = [v]
if v in graph:
graph[v].append(u)
else:
graph[v] = [u]
total = 0
visited = []
for i in range(1, n+1):
if i not in visited:
visited.extend(bfs(i))
total += 1
print(n - len(visited) + total)
ํ์ด
n, m = map(int, sys.stdin.readline().split())
graph = dict()
for _ in range(m):
u, v = map(int, sys.stdin.readline().split())
if u in graph:
graph[u].append(v)
else:
graph[u] = [v]
if v in graph:
graph[v].append(u)
else:
graph[v] = [u]
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋ฌธ์ ๋ฅผ ๊ผผ๊ผผํ ์ฝ์ด์ผ ํ๋ค๋ ๊ฑธ ๋๊ผ๋ค. ์ง๋ฌธ์๋ ์๊ฐ๋ณด๋ค ๋ง์ ํํธ๊ฐ ์๋ค. ๊ฐ์ ๊ฐ์ ์ ํ ๋ฒ๋ง ์ฃผ์ด์ง๋ค๊ณ ์ฐ์ฌ์ ธ ์์ด์ ๋์ ๋๋ฆฌ์ ์ ์ฅํด์ค ๋ key๊ฐ u์ผ ๋, key๊ฐ v์ผ ๋ ๋ ๋ค ์ ์ฅํด์คฌ๋ค.
total = 0
visited = []
for i in range(1, n+1):
if i not in visited:
visited.extend(bfs(i))
total += 1
print(n - len(visited) + total)
๊ทธ ๋ค์์๋ ์ผ๋ฐ์ ์ธ ๋๋์ผ๋ก.. ๊ทธ๋ํ๋ฅผ ์ํํ๋ฉด์ ๋ฐฉ๋ฌธํ ๋ฐฐ์ด์ ์์ผ๋ฉด bfs ํจ์๋ฅผ ํตํด ํ์ํ๊ณ , ํ์ํ discovered ๋ฐฐ์ด์ visited ๋ฐฐ์ด์ ์ถ๊ฐํ๋ค. ๋ง์ง๋ง ์ถ๋ ฅ๋ฌธ์ด ํต์ฌ์ธ๋ฐ, ์ด ๊ธ์ ๋ต๋ณ์ ํตํด ์์๋ค. ์ด์ด์ง๋ ๊ฐ์ ์ด ์๋ค๊ณ ์ ์ ์ด ์๋๊ฒ ์๋๋ค. ์ ์ฒด ์ ์ ์ ๊ฐ์์์ ๋ฐฉ๋ฌธํ ์์์ ๊ฐ์๋ฅผ ๋นผ๊ณ , total์ ์ ์ฅํด๋ ์ด์ด์ง ์ ์ ๊ฐ์๋ฅผ ๋ํด์ ์ถ๋ ฅํ๋ค.
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote