๐กsolutions )
๐ฌ DFS ์๊ณ ๋ฆฌ์ฆ, stack ์๋ฃํ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ํด๊ฒฐํจ
๐ฌ computer ํ๋์ฉ visit ๋ฐฐ์ด์ ํตํด ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด dfsํจ์๋ฅผ ๋๋ฆฐ๋ค -> ๋ค๋ฅธ ์ปดํจํฐ๋ค๊ณผ์ ์ฐ๊ฒฐ์ฑ์ ํ์ธํ์ฌ ์ฐ๊ฒฐ๋ผ ์์ผ๋ฉด stack ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๊ธฐ -> ์ด๋ ๋ฐฉ๋ฌธํ๋ค๊ณ visit๋ฐฐ์ด์ cnt๊ฐ ํ ๋น
๐ฌ ํ๋ฒ์ dfs ํ์์ด ๋๋ ํ cnt +=1 ๋ก 1์ฉ ๊ฐ์ ํค์์ฃผ๊ธฐ (์ ์ฒด ๋คํธ์ํฌ๊ฐ ๋ช๊ฐ์ธ์ง ์ฐพ๊ธฐ ์ํ ์นด์ดํธ)
๐ฌ ์ด๋ ์ฃผ์ํด์ผ ํ ์ ์, cnt = 0๋ถํฐ ์์ํ๋ฉด visit๋ฐฐ์ด์์ 0์ผ๋ก ํํ๋ ๊ฒ๋ค์ด ๊ณ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ฌดํ๋ฃจํ ๋๊ธฐ ๋๋ฌธ์ cnt = 1๋ถํฐ ์์ํ์ฌ ๋ง์ง๋ง ์ถ๋ ฅ์์ -1ํ ๊ฐ์ด ์ ๋ต์ด ๋๋ค.
๐จ๐ปcode )
def dfs(visit,computers, i, cnt):
stack = [i]
while stack:
a = stack.pop()
for j in range(len(computers)):
if computers[a][j] == 1 and not visit[j]:
stack.append(j)
visit[i] = cnt
return visit
def solution(n, computers):
visit = [0]*n
cnt = 1
for i in range(n):
if not visit[i]:
dfs(visit, computers, i, cnt)
cnt += 1
return cnt-1
๐description )
๋ฌธ์ ์ค๋ช
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ 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์ ๋๋ค.
์ ์ถ๋ ฅ ์
ncomputersreturn
3 | [[1, 1, 0], [1, 1, 0], [0, 0, 1]] | 2 |
3 | [[1, 1, 0], [1, 1, 1], [0, 1, 1]] | 1 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์์ #1
์๋์ ๊ฐ์ด 2๊ฐ์ ๋คํธ์ํฌ๊ฐ ์์ต๋๋ค.
์์ #2
์๋์ ๊ฐ์ด 1๊ฐ์ ๋คํธ์ํฌ๊ฐ ์์ต๋๋ค.