python - leetcode - 547 - ๋ชจ๋ฉํธ
1397 ๋จ์ด leetcode ์๊ณ ๋ฆฌ์ฆ
N N ์ ํ๋ ฌ M ์ ์ง์ ํ์ฌ ํ๊ธ ์ค ํ์ ๊ฐ ์ ์น๊ตฌ ๊ด ๊ณ ๋ฅผ ๋ํ ๋ธ๋ค.๋ง์ฝ ์ M [i] [j] = 1 ์ i ๋ฒ ์งธ ์ j ๋ฒ ์งธ ํ์ ์ด ์๋ก ์น๊ตฌ ๊ฐ ๋ ๋ ๊ฒ ์ ์ ๊ณ ์ ์ ์ ๋ํ ๋ธ๋ค. ๊ทธ๋ ์ง ์ ์ผ ๋ฉด ๋ชจ๋ฅธ๋ค.๋ ๋ ๋ชจ๋ ํ์ ๋ค ์ด ์ด๋ฏธ ์ ๊ณ ์ ๋ ์น๊ตฌ ๊ถ ์ ์ด ์ ๋ฅผ ์ถ๋ ฅ ํด ์ผ ํ๋ค.
์์ 1:
:
[[1,1,0],
[1,1,0],
[0,0,1]]
: 2
๏ผ 0 1 ๏ผ ใ
2 ใ 2ใ
์์ 2:
:
[[1,1,0],
[1,1,1],
[0,1,1]]
: 1
๏ผ 0 1 ๏ผ 1 2 ๏ผ 0 2 ๏ผ ๏ผ 1ใ
์ฃผ์:
N ์ [1, 200] ์ ๋ฒ์ ๋ด ์ ์๋ค
4. 567917. ๋ชจ๋ ํ์ ์ ๊ฒ M [i] [i] = 1 ์ด ์ ์ต ๋ ๋ค
4. 567917. M [i] [j] = 1 ์ด ์ ์ผ ๋ฉด M [j] [i] = 1 ์ด ์๋ค
์ฝ๋ ๋ ๋ค์ ๊ณผ ๊ฐ ์ต ๋ ๋ค:
class Solution:
def findCircleNum(self, M: 'List[List[int]]') -> 'int':
visited = [0 for _ in range(len(M))]
n = len(M)
res = 0
for i in range(n):
if visited[i] == 0:
res += 1
self.dfs(M, i, visited)
return res
def dfs(self, M, i, visited):
visited[i] = 1
for j in range(len(M)):
if M[i][j] != 0 and visited[j] == 0:
self.dfs(M, j, visited)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค