프로그래머스 레벨 3 네트워크

yjkim·2023년 5월 1일
0

알고리즘

목록 보기
4/60

문제

문제 설명
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 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입니다.


(위 사진은 1-2,3으로 이루어진 2개의 네트워크)

접근

연결된 네트워크는 하나의 네트워크로 취급하기 때문에, visit 처리 되지 않은 정점들을 순회하면서 answer 변수에 +1을 해준 후 각 정점으로 부터 도달할 수 있는 모든 정점을 visit 처리해줌. 그 후 answer 을 return 하면 정답임.

코드

from collections import deque
def solution(n, computers):
    visited=[0]*n
    answer=0
    queue=deque()
    for i in range(n):
        if visited[i]:
            continue
        else:
            queue.append(i)
            answer+=1
            visited[i]=1
            while queue:
                cur=queue.popleft()
                for j in range(n):
                    if computers[cur][j]==1:
                        if visited[j]:
                            continue
                        visited[j]=1
                        queue.append(j)
                    
    return answer

아 여기서 한가지 실수
실수는 아니고 깜빡한것
실제로 코딩테스트 상황에서는 하나의 dfs/bfs 함수를 여러번 호출해야할 경우가 있을 수도 있기 때문에 solution함수 안에서 dfs/bfs처리 해주는 것보다 dfs/bfs 함수를 직접 만들어서 그 안에서 계산하는 것이 좋음.

수정 코드

from collections import deque
def dfs(n,computers):
    visited=[0]*n
    answer=0
    queue=deque()
    for i in range(n):
        if visited[i]:
            continue
        else:
            queue.append(i)
            answer+=1
            visited[i]=1
            while queue:
                cur=queue.popleft()
                for j in range(n):
                    if computers[cur][j]==1:
                        if visited[j]:
                            continue
                        visited[j]=1
                        queue.append(j)
    return answer
    
def solution(n, computers):
    return dfs(n,computers)

별건 없고 그냥 solution 안의 내용을 새롭게 정의한 함수 안에 넣어주었음

profile
We may throw the dice, but the Lord determines how they fall

0개의 댓글

관련 채용 정보