~๋ชฉ์ฐจ~
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/43162
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ์ฌ์ผ ํ๊ธฐ ๋๋ฌธ์ DFS/BFS ๋ ๋ค ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์์ต๋๋ค.
ํ์ง๋ง Python์ DFS ํจ์จ์ด ์ข์ง ์๊ธฐ ๋๋ฌธ์ BFS๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค.
BFS
- ๋ชจ๋ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ง ์์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ BFS๋ฅผ ๋๊ณ ๋ ๋ค ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ค์ ์ฐพ์์ผ ํจ
- ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด queue์ ์ฝ์ ํ์ฌ BFS๋ฅผ ์ํํ์ฌ ํด๋น ๋คํธ์ํฌ ๋ ธ๋์ ๋ํด ์ ๋ถ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ(visited)
- ๊ฐ ๋ ธ๋ ๋ณ computers ๋ฆฌ์คํธ ๊ฐ์์ ๋ณธ์ธ๊ณผ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด์(1์ด๋ฉด์) ์์ง ๋ฐฉ๋ฌธํ์ง ์์(visited๊ฐ False) ๋ ธ๋(i)๋ฅผ ์ฝ์
- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๋๊น์ง ๋ฐ๋ณตํ๋ฉด ๋คํธ์ํฌ๋ฅผ ํ๋ ๋๋ธ๊ฒ์ด๋ค.
DFS
- ๋ฐฉ๋ฌธํ ๋ ธ๋๋ set ์๋ฃ๊ตฌ์กฐ์์ ๊ด๋ฆฌ
- ํฐ ํ์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ธ ( ๋คํธ์ํฌ )
- ์ฌ๊ทํจ์๋ฅผ ํจ์ ๋ด๋ถ์ ๊ตฌํํจ์ผ๋ก visited ์ ๊ทผ ๊ฐ๋ฅ
- DFS๋ฅผ ๋๋ด๊ณ ๋์์๋ค = ๋คํธ์ํฌ ํ๋ ๋๊ณ ์๋ค
์์ฑ ์ฝ๋
BFS
from collections import deque
def solution(n, computers):
que = deque()
visited = [False] * n
count = 0
for vertex in range(n):
if not visited[vertex]: # ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์์ ๋
ธ๋
# BFS
que.append(vertex)
while que: # queue์ ๊ฐ์ด ์๋ ๋์
q = que.popleft()
visited[q] = True # ๋ฐฉ๋ฌธ ํ์
for i, v in enumerate(computers[q]): # ๋ง์ฝ computer[q][i] = 1์ด๋ผ๋ฉด ์ฐ๊ฒฐ๋จ
if not visited[i] and v: # ์ฐ๊ฒฐ๋ node๊ฐ ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
que.append(i)
count += 1 # ํ ๋คํธ์ํฌ ์๋ฃ
return count
print(solution(3, [[1, 1, 0], [1, 1, 0], [0, 0, 1]])) # 1
print(solution(3, [[1, 1, 0], [1, 1, 1], [0, 1, 1]])) # 2
DFS
def solution(n, computers):
visited = set()
answer = 0
def dfs(computer):
for i, c in enumerate(computers[computer]):
if i not in visited and c:
visited.add(i)
dfs(i)
for c in range(len(computers )):
if c not in visited:
visited.add(c)
dfs(c)
answer += 1
return answer
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
'๐๋ฌธ์ ํ์ด > ๐งฉProgrammers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ํ๋ก๊ทธ๋๋จธ์ค H-Index (0) | 2023.04.22 |
---|---|
[Python] ํ๋ก๊ทธ๋๋จธ์ค ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ | ํจ์จ์ฑ (2) | 2023.04.21 |
[Python] ํ๋ก๊ทธ๋๋จธ์ค ํ๊ฒ ๋๋ฒ | DFS/BFS (0) | 2023.04.19 |
[Programmers] ํ๋ก๊ทธ๋๋จธ์ค ์ด์ํ ๋ฌธ์ ๋ง๋ค๊ธฐ | Level 1 (0) | 2023.03.29 |
[Python] ํ๋ก๊ทธ๋๋จธ์ค ํ๊ฒ ๋๋ฒ | ๋๋น ์ฐ์ ํ์(BFS) (0) | 2023.03.02 |