๋ฌธ์ ์ค๋ช
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ A์ ์ปดํจํฐ B๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๊ณ , ์ปดํจํฐ B์ ์ปดํจํฐ C๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ ๋ ์ปดํจํฐ A์ ์ปดํจํฐ C๋ ๊ฐ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํจํฐ A, B, C๋ ๋ชจ๋ ๊ฐ์ ๋คํธ์ํฌ ์์ ์๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ปดํจํฐ์ ๊ฐ์ n, ์ฐ๊ฒฐ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด computers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋คํธ์ํฌ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์์ค.
ํ์ด1 - DFS
def DFS(n, computers, visited, i):
visited[i] = True
for j in range(n):
if computers[i][j] ==1 and visited[j] == False:
DFS(n, computers, visited, j)
def solution(n, computers):
answer = 0
visited = [False] * n
for i in range(n):
if visited[i] == False :
DFS(n, computers, visited, i)
answer += 1
return answer
๋ฌธ์ ์ ํต์ฌ
1. DFS๋ฅผ ์ด์งํธ๋ฆฌ๋ก๋ง ๋ดค๋ ๊ฒ์ด ์ด ๋ฌธ์ ์ ํฐ ์ฅ์ ๋ฌผ์ด ๋์.
2. ๋คํธ์ํฌ๋ ์ฐ๊ฒฐ๋์ด ์๊ณ , ๊ทธ๊ฒ์ ํธ๋ฆฌ๋ก ๋ณด๊ณ , ๊น์ด ์ฐ์ ํ์์ผ๋ก ๋์ด์ ์ฐ๊ฒฐ๋ ๋ ธํธ๊ฐ ์๋ค๋ฉด, ๊ทธ๊ฒ์ผ๋ก ํ๋์ ๋คํธ์ํฌ๋ผ๊ณ ๋ณธ ๊ฒ.
ํ์ด2 - BFS
def BFS(n, computers, visited, i):
stack = [i]
while stack :
k = stack.pop()
if visited[k] == False:
visited[k] = True
for j in range(n):
if visited[j] == False and computers[k][j] == 1 :
stack.append(j)
def solution(n, computers):
answer = 0
visited = [False] * n
for i in range(n):
if visited[i] == False:
BFS(n, computers, visited, i )
answer +=1
return answer
ํ์ด3 - BFS
def BFS(n, computers):
answer = 0
visited =[False] * n
for i in range(n):
if visited[i] == False:
stack =[i]
while stack:
k = stack.pop()
visited[k] = True
for j in range(n):
if computers[k][j] == 1 and visited[j] == False:
stack.append(j)
answer +=1
return answer
def solution(n, computers):
return BFS(n, computers)
print(solution(3, [[1, 1, 0], [1, 1, 1], [0, 1, 1]]))
์ค๋ฅ ์ด์
While stack: ๋ถ๋ถ์์
visited[k] = True๋ฅผ ์กฐ๊ฑด๋ฌธ์์ด ์ผ๋ค.
์กฐ๊ฑด๋ฌธ ์์ด ์ฐ๋, stack์ด ์์ธ ๋ ธ๋๋ค์
.... ๊ฐ ์๋๋ผ
visited[k] == True๋ผ๊ณ ์ผ๋ค. ใ กใ ก
๋ด๊ฐ ์ฐพ์ ์ด์ ๋ ์ํฉ์ ๋ผ์ด๋ง์ถ ๊ฒ์ด์๊ณ ,
์ ํํ ์ด์ ๋ ๋ฌธ๋ฒ ์ค๋ฅ์ ์๋ค.
๊ทธ๋ผ ๋น์ฐํ ๋ฐฉ๋ฌธ์ฒดํฌ๊ฐ ๋์ง ์๊ณ ,
While๋ฌธ์์ ์์ธ ์คํ์์ ๋ฐฉ๋ฌธํ์ง ์์์ ๋ ์์ด๋
stack.append(j)๊ฐ ๊ณ์ํด์ ์์ด๊ณ ๋ค์ ํจ์๋ก ๋์ด๊ฐ์ง ์์
BFSํจ์์ ๋ฆฌํด๊ฐ์ด none์ผ๋ก ๋์๋ ๊ฑฐ์์๋ค..!
'๐ Python > ๐ค Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1931๋ฒ ํ์์ค ๋ฐฐ์ (0) | 2021.10.01 |
---|---|
ํ์๋ฒ(Greedy): ์ฒด์ก๋ณต (0) | 2021.09.22 |
์ฌํ๊ฒฝ๋ก: DFDํ์ด (0) | 2021.08.27 |
๋จ์ด๋ณํ: DFS, BFS ํ์ด (0) | 2021.08.26 |
ํ๊ฒ๋๋ฒ: DFDํ์ด (0) | 2021.08.25 |