๐ณ ๋งํฌ
ํ๋ก๊ทธ๋๋จธ์ค ๋คํธ์ํฌ
๐ ๋ฌธ์
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ A์ ์ปดํจํฐ B๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๊ณ , ์ปดํจํฐ B์ ์ปดํจํฐ C๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ ๋ ์ปดํจํฐ A์ ์ปดํจํฐ C๋ ๊ฐ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํจํฐ A, B, C๋ ๋ชจ๋ ๊ฐ์ ๋คํธ์ํฌ ์์ ์๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ปดํจํฐ์ ๊ฐ์ n, ์ฐ๊ฒฐ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด computers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋คํธ์ํฌ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์์ค.
๐พ ํ์ด ๋ฐฉ๋ฒ
์ปดํจํฐ์ ๋ฒํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ํ๋ค.
๋จผ์ , ์ปดํจํฐ์ ์ ๋งํผ visit์ด๋ผ๋ ๋ฐฉ๋ฌธ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
ํด๋น ๋ฒํธ์ ์ปดํจํฐ๋ฅผ ๋ฐฉ๋ฌธํ๋ค๋ฉด visit์ 1๋ก ๋ฐ๊พธ์ด์ค๋ค.
dfs์์๋ ์ปดํจํฐ ๋ฒํธ๋ฅผ st์ ๋ฃ๊ณ , ๊ทธ ๋ฒํธ์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ ๋ฒํธ๋ฅผ ๋ค์ ๋ st์ ๋ฃ๋๋ค. ๋ง์ฝ ์๋ค๋ฉด, st์ด empty๊ฐ ๋ ๊ฒ์ด๊ณ dfs๋ฅผ ๋น ์ ธ๋์ค๋ฉด์ answer์ 1 ์ฆ๊ฐ ์ํจ๋ค. ์ฆ, ๋คํธ์ํฌ์ ์๊ฐ 1 ์ฆ๊ฐํ๋ค.
๋ชจ๋ ํ ์คํธ์ผ์ด์ค ์ฑ๊ณต ์ฝ๋
def solution(n, computers):
answer = 0
visit = [0 for _ in range(n)]
def dfs(start):
st = [start]
while st:
com_num = st.pop()
if visit[com_num] == 0:
visit[com_num] = 1
for i in range(len(computers[0])):
if computers[com_num][i] == 1 and visit[i] == 0:
st.append(i)
i = 0
while 0 in visit:
if visit[i] == 0:
dfs(i)
answer += 1
i += 1
return answer
}