๋ฌธ์ ์ค๋ช
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ A์ ์ปดํจํฐ B๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๊ณ , ์ปดํจํฐ B์ ์ปดํจํฐ C๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ ๋ ์ปดํจํฐ A์ ์ปดํจํฐ C๋ ๊ฐ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํจํฐ A, B, C๋ ๋ชจ๋ ๊ฐ์ ๋คํธ์ํฌ ์์ ์๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ปดํจํฐ์ ๊ฐ์ n, ์ฐ๊ฒฐ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด computers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋คํธ์ํฌ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์์ค.
์ ํ์ฌํญ
- ์ปดํจํฐ์ ๊ฐ์ n์ 1 ์ด์ 200 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ๊ฐ ์ปดํจํฐ๋ 0๋ถํฐ n-1์ธ ์ ์๋ก ํํํฉ๋๋ค.
- i๋ฒ ์ปดํจํฐ์ j๋ฒ ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด computers[i][j]๋ฅผ 1๋ก ํํํฉ๋๋ค.
- computer[i][i]๋ ํญ์ 1์ ๋๋ค.
์ ๋ต
def solution(n, computers):
answer = 0
graph = {}
for i in range(n):
graph[i] = list(filter(lambda x: computers[i][x] == 1, range(n)))
visited = []
for i in range(n):
if i not in visited:
# DFS
stack = [i]
while stack:
k = stack.pop()
if k not in visited:
visited.append(k)
stack.extend(graph[k])
answer += 1
return answer
DFS๋ฅผ ํ์ฉํ๊ธฐ ์ํด graph ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค์ด ๊ฐ๊ฐ ์ด๋ค ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ด ์๋์ง ์ ์ฅํ๋ค.
filter์ ๋๋คํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ธ๋ฑ์ค์ ์ด์ฐจ์๋ฐฐ์ด ๊ฐ์ด 1์ธ ๋๋ฒ์งธ ์ธ๋ฑ์ค๋ค์ ๋ฆฌ์คํธ ํํ๋ก ๋์ ๋๋ฆฌ์ ์ ์ฅํ๋ค.
๋ฐฉ๋ฌธํ์์ ๋ํ๋ผ visited ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ , ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค i๊ฐ visited์ ์๋ค๋ฉด DFS๋ฅผ ์คํํ๋ค.
DFS๋ฅผ ํ๋ฒ ์ํํ ๋๋ง๋ค ๋คํธ์ํฌ๊ฐ ํ๋ ๋ง๋ค์ด์ง๋ ๊ฒ์ด๋ฏ๋ก answer์ 1์ ๋ํ๋ค.
์๋ ํฌ์คํ ์ DFS์ ์์ธํ ์ค๋ช ์ด๋ค.
2021.04.05 - [๐์๊ณ ๋ฆฌ์ฆ/๐ ๊ฐ๋ ์ ๋ฆฌ] - [ํ์ด์ฌ/python] DFS์ BFS