네트워크 Pgs#43162
네트워크 PGs#43162
Python 코드 보기
linked = []
def dfs(idx, n, computers):
global linked
linked[idx] = 1
for i in range(0, n):
if computers[idx][i] == 1 and linked[i] == 0:
# print(f"{idx}-{i} linked.")
dfs(i, n, computers)
def solution(n, computers):
global linked
answer = 0
for i in range(n):
linked.append(0)
for i in range(n):
if linked[i] == 0 :
dfs(i, n, computers)
answer += 1
return answer
컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.
☝ 입력 형식
컴퓨터의 개수 n
, 연결에 대한 정보가 담긴 2차원 배열 computers
가 매개변수로 주어집니다.
제한사항
- 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다.
- 각 컴퓨터는 0부터
n-1
인 정수로 표현합니다. - i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면
computers[i][j]
를 1로 표현합니다. computer[i][i]
는 항상 1입니다.
🤞 출력 형식
- 네트워크의 개수를 return 하도록
solution
함수를 작성하시오.
🤟 구현 과정
1. 알고리즘 정립
어떤 식으로 주어진 내용을 구현할 지 먼저 고민했다.
네트워크의 개수만 찾으면 되므로, 처음에 모든 컴퓨터는 어떤 네트워크에도 속해있지 않다고 판단하고 코딩을 시작한다.
-
어떤 한 컴퓨터가 어떤 네트워크에도 속해있지 않을 때, 해당 컴퓨터와 연결된 컴퓨터를 찾고, 연결된 다른 컴퓨터와 추가로 이어진 컴퓨터가 있는지 검색한다.
-
위의 시행이 한번 시행되면 네트워크의 개수가 1개 늘어난다.
-
모든 컴퓨터가 어떤 네트워크에 속할 때 까지 반복한다.
2. 구현
-
이 컴퓨터가 속하는 네트워크를 찾았다는 것을 표시하기 위해
linked
라는 배열을 선언하였다.
linked
는 컴퓨터의 개수 만큼의0
을 가지고 있는 배열로, 네트워크를 구분하지 않고 속하기만 한다면1
로 전환된다. -
linked
가0
인computer
을 발견하면, 해당 컴퓨터와 연결된 모든 컴퓨터를 검색하는dfs()
를 구현하였다.
이 때, 해당 컴퓨터와 연결된 하나의 네트워크가 생성되는 것 이므로,answer += 1
을 수행한다.
dfs()
가 시행됨과 동시에 해당 컴퓨터는 어떤 네트워크에 속하게 되므로,linked
를1
로 바꾼다. -
dfs()
에서 해당 컴퓨터와 연결 된 다른 컴퓨터를 찾았다면, 해당 컴퓨터를 기준으로dfs()
를 반복해서 시행한다.
단, 이때는 기존 네트워크에 포함되는 경우이므로answer += 1
이 시행되지 않는다. -
위 과정을 모든 컴퓨터에 대해서 수행하면, 총 네트워크의 개수를 알 수 있다.
댓글남기기