본문 바로가기

알고리즘

[programmers] 네트워크


로직

문제가 처음에 잘 이해가 안갔다,,,(난 바보다.,,)

n = 3
computers = [[1, 1, 0], [1, 1, 0], [0, 0, 1]]
: 2 -> why? 1,2가 하나의 네트워크, 3이 하나의 네트워크

n = 3
computers = [[1, 1, 0], [1, 1, 1], [0, 1, 1]]
: 1 -> why? 1,2,3이 하나의 네트워크

 

 - visit으로 확인하면서 bfs를 사용한다. 방문한 곳(i)은 visit[i] = 1로 바꿔주고 bfs를 이용하면서 연결된 부분을 찾아낸다.

   bfs문에 들어간 횟수 = 네트워크 갯수이다. 따라서 while을 한번 다 돌면 cnt += 1을 해준다

 

코드

from collections import deque

def solution(n, computers):
    visit = [0] * n
    cnt = 0
    q = deque()
    for i in range(n):
        if visit[i] == 0:
            q.append(i)
            visit[i] = 1

            # bfs문에 들어간 횟수 = 네트워크 갯수
            while q:
                x = q.popleft()
                for j in range(n):
                    if computers[x][j] == 1 and visit[j] == 0:
                        visit[j] = 1
                        q.append(j)

            cnt += 1

    return cnt

 

'알고리즘' 카테고리의 다른 글

[programmers] 후보키  (0) 2020.09.04
[programmers] 다리를 지나는 트럭  (0) 2020.09.04
[programmers] 파일명 정렬  (0) 2020.09.02
[programmers] 오픈채팅방  (0) 2020.09.01
[programmers] 뉴스 클러스터링  (0) 2020.08.31