๋ฐ์ํ
๐ฑ ๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ฑ ํ์ด
์ ํ์ ์ธ DFS ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ ํธ๋ ๋ฌธ์ ์ ๋๋ค.
0. ๋ณ์ ์ด๊ธฐํ์ ๊ทธ๋ํ ์ ๋ณด
visited = [False for _ in range(n + 1)]
graph = [[] for _ in range(n + 1)]
answer = 0
for i in range(len(computers)):
for idx, val in enumerate(computers[i]):
if i != idx and val == 1:
graph[i + 1].append(idx + 1)
- ์ธ์ ํ๋ ฌ ๋ฐฉ์์ผ๋ก ์ฃผ์ด์ง ๊ทธ๋ํ ์ ๋ณด๋ฅผ ์ธ์ ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. (
computers
๋ฅผ for๋ฌธ์ผ๋ก ๋๋ฉด์graph
์ ์ฐ๊ฒฐ๋ ๋ ธ๋ ์ ๋ณด๋ฅผ appendํฉ๋๋ค.) visited
๋ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํด์ค ๋ฆฌ์คํธ์ ๋๋ค.
1. dfs ์๊ณ ๋ฆฌ์ฆ
def dfs(graph, v, visited):
visited[v] = True
for i in graph[v]:
if visited[i] == False:
dfs(graph, i, visited)
- dfs๊ฐ ํธ์ถ๋์์ ๋์ ํ์ฌ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํด์ค๋๋ค.
- ํ์ฌ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ๋ํด ์ฌ๊ท์ ์ผ๋ก dfs๋ฅผ ํธ์ถํฉ๋๋ค.
2. dfs ํ์ํ๋ฉฐ ๋คํธ์ํฌ ๊ฐ์ ์ธ๊ธฐ
for i in range(1, len(computers) + 1):
if visited[i] == False:
dfs(graph, i, visited)
answer += 1
- ๋ฐฉ๋ฌธํ์ง ์์ ๋ชจ๋ ๋ ธ๋๋ค์ ๋ฐฉ๋ฌธํ์ฌ dfsํ์ํฉ๋๋ค.
- ๋๊น์ง ํ์ํ๊ณ ๋์์๋,
answer
๋ฅผ 1 ์ฆ๊ฐ์ํต๋๋ค.
๐ฑ ์ฝ๋
def solution(n, computers):
visited = [False for _ in range(n + 1)]
graph = [[] for _ in range(n + 1)]
answer = 0
for i in range(len(computers)):
for idx, val in enumerate(computers[i]):
if i != idx and val == 1:
graph[i + 1].append(idx + 1)
def dfs(graph, v, visited):
visited[v] = True
for i in graph[v]:
if visited[i] == False:
dfs(graph, i, visited)
for i in range(1, len(computers) + 1):
if visited[i] == False:
dfs(graph, i, visited)
answer += 1
return answer
๋ฐ์ํ
๋๊ธ