๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ต๏ธโ๏ธ ๋ฌธ์
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ 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์ ๋๋ค.
๐โ๏ธ ํ์ด๋ณด์~
DFS์ BFS๋ก ํ ์ ์๋ ๋ฌธ์ ๋ค.
๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ชจ๋ ํด๋ณด์!
1. DFS๋ก ํ์ด๋ณด๋ฉด,,,
- ๋ฐฉ๋ฌธ์ ํ๋์ง ํ์ธ์ ๋์์ค visited ๋ฐฐ์ด์ ์ฌ์ฉํ๋ค.
def dfs(n, computers, com, visited):
# dfs ๋๊ธฐ ์ํ ์ปดํจํฐ๋ ์ฐ์ ๋ฐฉ๋ฌธํ๋ค๊ณ ์ฐ๋๋ค.
visited[com] = True
# ์ปดํจํฐ๋ค ๊ฐ์๋งํผ for๋ฌธ ๋๋ ค์ com๊ณผ ์ฐ๊ฒฐ๋์ด์๊ณ ๋ฐฉ๋ฌธํ์ ์๋ ๊ฒ์ ์ฐพ๋๋ค.
# ์ฐพ์ผ๋ฉด ์๋ dfs๋๋ฆฐ๋ค.
for connect in range(n):
if connect != com and computers[com][connect] == 1:
if visited[connect] == False:
dfs(n, computers, connect, visited)
def solution(n, computers):
answer = 0
# ๋ฐฉ๋ฌธํ ๊ธฐ๋ก์ ๋จ๊ธฐ๋ visited
# ๋ฐฉ๋ฌธํ ์ ์ด ์์ผ๋ฉด False๋ค.
visited = [False] * n
# ์ปดํจํฐ ํ๋์ฉ ๋๋ ค๋ณด๋ฉฐ ๋ฐฉ๋ฌธํ ์ ์๋ ์ปดํจํฐ๋ฅผ ์ฐพ์
# dfsํด์ฃผ๊ณ , ํ๋ฒ ๋๋๋ฉด answer์ 1์ ๋ํด์ค๋ค.
for com in range(n):
if visited[com] == False:
dfs(n, computers, com, visited)
answer += 1
return answer;
2. BFS๋ก ํ์ด๋ณด๋ฉด,,,
dfs์ ๋ฌ๋ฆฌ deque ๋ฑ์ import ํด์ค์ผ ํ๋ค.
from collections import deque
def bfs(n, computers, com, visited):
# ๋ฑ์ ํ์ฌ com ๋ฒํธ๋ฅผ ๋ฃ์ด์ค๋ค.
q = deque([com])
# ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์ํด
visited[com] = True
# q๋ฅผ ๋๋ฆฌ๋ฉด์ popleft ํด์ฃผ๊ณ ... ๋ค๋ ค์ค์ผํ๋ ์ ๋ฉด appendํด์ค๋ค
while q:
com = q.popleft()
for connect in range(n):
if connect!=com and computers[com][connect]==1 and not visited[connect]:
q.append(connect)
visited[connect] = True
def solution(n, computers):
answer = 0
visited = [False] * n
for com in range(n):
if visited[com] == False:
bfs(n, computers, com, visited)
answer += 1
return answer;
'๐ต๏ธโโ๏ธ > programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] programmers - ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ ( ์คํ/ํ ) (0) | 2021.11.10 |
---|---|
[Python] programmers - ๊ธฐ๋ฅ๊ฐ๋ฐ ( ์คํ/ํ ) (0) | 2021.11.04 |