[Python/알고리즘] DFS : 네트워크 (프로그래머스)

2021. 7. 18. 14:21·Programming/Algorithm

문제 설명

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

입출력 예

ncomputersreturn

3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 2
3 [[1, 1, 0], [1, 1, 1], [0, 1, 1]] 1

입출력 예 설명

예제 #1
아래와 같이 2개의 네트워크가 있습니다.

예제 #2
아래와 같이 1개의 네트워크가 있습니다.

 

 

 

해결 방법

1. 하나의 노드에서 방문할 수 있는 최대한으로 방문하면 하나의 네트워크가 형성된다.

2. 방문한 노드임을 알기 위해 visited 리스트를 사용해 중복 방문하지 않도록 한다.

3. 탐색은 한번 수행시 최대한으로 이루어져야하므로 DFS를 사용한다.

 

해결 코드

def solution(n, computers):
    answer = 0
    visited = [False for i in range(n)]
    for com in range(n):
        if visited[com] == False:
            DFS(n, computers, com, visited)
            answer += 1 #DFS로 최대한 컴퓨터들을 방문하고 빠져나오게 되면 그것이 하나의 네트워크.
    return answer

def DFS(n, computers, com, visited):
    visited[com] = True
    for connect in range(n):
        if connect != com and computers[com][connect] == 1: #연결된 컴퓨터
            if visited[connect] == False:
                DFS(n, computers, connect, visited)
저작자표시 비영리 변경금지

'Programming > Algorithm' 카테고리의 다른 글

[Python/알고리즘] 다단계 칫솔 판매 (Lv.3)  (0) 2021.08.04
[Python/알고리즘] DFS : 여행경로 (프로그래머스)  (0) 2021.07.18
[Python/알고리즘] BFS : 타겟 넘버 (프로그래머스)  (0) 2021.07.18
[Python/알고리즘] BFS : 단어변환 (프로그래머스)  (2) 2021.07.18
[Python / 알고리즘] 완전탐색 : 소수찾기 (프로그래머스)  (0) 2021.06.26
'Programming/Algorithm' 카테고리의 다른 글
  • [Python/알고리즘] 다단계 칫솔 판매 (Lv.3)
  • [Python/알고리즘] DFS : 여행경로 (프로그래머스)
  • [Python/알고리즘] BFS : 타겟 넘버 (프로그래머스)
  • [Python/알고리즘] BFS : 단어변환 (프로그래머스)
코딩으로세계정복
코딩으로세계정복
Connecting the dots
  • 코딩으로세계정복
    코딩으로 세계정복
    코딩으로세계정복
  • 전체
    오늘
    어제
    • 전체 (134)
      • Who am I (10)
        • Portfolio (4)
        • Reminiscence (5)
        • Oversea (1)
        • SiliconValley (0)
      • React (36)
        • React Basic (15)
        • React Tech (5)
        • JavaScript (7)
        • TypeScript (3)
        • CSS&HTML (3)
        • Firebase (3)
      • NodeJS (1)
        • NodeJS Basic (1)
      • Flutter (55)
        • Flutter Widget Design (5)
        • Flutter Widget Basic (8)
        • Flutter Tech (18)
        • Flutter Issue (7)
        • Flutter Web (6)
        • About Flutter (2)
        • Firebase (1)
        • Dev Env (1)
        • Dart (7)
      • Programming (31)
        • Web (1)
        • General (0)
        • Algorithm (25)
        • Python (1)
        • VS Code (2)
      • Django (0)
  • 블로그 메뉴

    • Who I AM
    • React
    • NodeJS
    • Flutter
    • Programming
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리액트
    링고리
    flutter web
    DART
    자바스크립트
    HTML
    useState
    useRef
    Python
    Flutter
    react
    Redux
    JavaScript
    포트폴리오
    useTranslation
    Lingory
    CSS
    map
    탐욕법
    github
    Firebase
    파이썬
    프로그래머스
    웹
    알고리즘
    플러터 웹
    플러터
    JSON
    DP
    TypeScript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩으로세계정복
[Python/알고리즘] DFS : 네트워크 (프로그래머스)
상단으로

티스토리툴바