✨APS (Algorithm Problem Solving)/프로그래머스

[프로그래머스] LV.3 네트워크/ 파이썬(Python)

Nyan cat 2022. 10. 24. 10:26

📜 문제 설명

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다.

예를 들어, 컴퓨터 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입니다.

 

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/43162

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🔧 입출력 예시

n computers return
3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 2
3 [[1, 1, 0], [1, 1, 1], [0, 1, 1]] 1

 

네트워크 2개 : 1, 2번이 연결된 네트워크 & 3번 네트워크

 

 

 

 

 

 

 

💡 문제 풀이

전형적인 BFS문제이다.

  1. 특정 정점으로 시작하여 1을 더해주고 해당 정점에 연결된 모든 정점을 방문한다.
  2. 아직 방문하지 않은 정점을 찾아 방문하고 연결된 정점을 모두 방문한다.
  3. 위의 과정을 반복한다.
def solution(n, computers):
    answer = 0
	# 방문 체크
    visited = [0] * n
    # 인접 행렬
    adj = [[] for _ in range(n)]
    
    # 서로 연결된 네트워크를 파악한다.
    for i in range(n):
        for j in range(n):
            if i != j and computers[i][j]:
                adj[i].append(j)
    
    # BFS니까 queue를 쓴다
    queue = []
    # 모든 정점을 탐색하는데 
    for i in range(n):
    	# 특정 정점에 아직 방문하지 않은 경우 방문한다
        if not visited[i]:
            answer += 1
            queue.append(i)
            
        # 그와 연결된 모든 정점을 방문한다
        while queue:
            t = queue.pop(0)
            visited[t] = True
            for j in adj[t]:
                if not visited[j]:
                    queue.append(j)
                    
    
    return answer
반응형