ネットワーク
🔗 質問リンク
https://programmers.co.kr/learn/courses/30/lessons/43162
問題の説明
ネットワークとは、コンピュータ間で情報を交換する接続形式を指す.例えば、コンピュータAがコンピュータBに直接接続され、コンピュータBがコンピュータCに直接接続されている場合、コンピュータAとコンピュータCは間接的に接続されて情報を交換することもできる.そのため、コンピュータA、B、Cは同じネットワーク上に存在する.
指定されたコンピュータの個数nが、接続情報を含む2次元配列コンピュータをパラメータとする場合、ネットワークの個数を返すために解関数を記述します.
⚠▼制限
コンピュータの個数nは、1又は複数の200以下の自然数である.
各コンピュータは0からn−1までの整数で表される.
i番コンピュータがj番コンピュータに接続されている場合、コンピュータ[i][j]は1として表される.
コンピュータ[i][i]は常に1.
💡 プール(言語:Python)
DFS,BFSに関する問題であることが分かっていても,コードを記述することは容易ではない.学んで役に立つのはやはり難しい.人の解答を見てから、練習して書きます.今度似たような問題があったら、その時になったらよく練習しましょう.
①DFSプール
이 문제는 DFS가 속도가 더 빨리 나왔다.
## DFS : 끝까지 깊게 들어가는 탐색
def dfs(n, cur, computers, visited):
# 방문 여부 리스트에 방문 처리
if visited[cur] == False:
visited[cur] = True
for con in range(n):
if cur != con and computers[cur][con] == 1:
# 재귀함수로 미 방문 요소 존재시 방문
if visited[con] == False:
dfs(n, con, computers, visited)
def solution(n, computers):
answer = 0
# 방문 여부 리스트
visited = [False for i in range(n)]
# cur = 현재 컴퓨터
for cur in range(n):
if visited[cur] == False:
# dfs 한 사이클 = 1개의 네트워크
dfs(n, cur, computers, visited)
answer += 1
return answer
②解析BFS
## BFS : 같은 레벨 우선 탐색
from collections import deque
def bfs(n, cur, computers, visited):
# 맨 처음 시작 컴퓨터 방문 처리
visited[cur] = True
# 큐에 시작점 넣어주기
queue = deque([cur])
# 큐의 원소가 모두 사라질 때까지 반복
while queue:
# 큐 안에서 루프 돌릴 때 방문 처리
cur = queue.popleft()
visited[cur] = True
for con in range(n):
if cur != con and computers[cur][con] == 1:
# 미 방문 요소 존재시 큐에 추가해 방문
if visited[con] == False:
queue.append(con)
def solution(n, computers):
answer = 0
# 방문 여부 리스트
visited = [False for i in range(n)]
# cur = 현재 컴퓨터
for cur in range(n):
if visited[cur] == False:
# bfs 한 사이클 = 1개의 네트워크
bfs(n, cur, computers, visited)
answer += 1
return answer
Reference
この問題について(ネットワーク), 我々は、より多くの情報をここで見つけました https://velog.io/@shiningcastle/네트워크テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol