[Programmers] ๋„คํŠธ์›Œํฌ(BFS/DFS ํ’€์ด | Python)

๋ฐ˜์‘ํ˜•

๐ŸŒฑ ๋ฌธ์ œ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

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

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€