happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (302)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (54)
      • DevOps (4)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)
    • 보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • kubernetes
  • apply
  • 15
  • replace
  • edit
  • Patch
  • 18

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

[python] 프로그래머스 > DFS/BFS > 네트워크
알고리즘/알고리즘 문제

[python] 프로그래머스 > DFS/BFS > 네트워크

2021. 2. 25. 11:57

[문제]

1. 문제 설명

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.

컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오.

 

2. 제한사항

  • 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다.
  • 각 컴퓨터는 0부터 n-1인 정수로 표현합니다.
  • i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현합니다.
  • computer[i][i]는 항상 1입니다.

3. 입출력 예

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

 

4. 입출력 예 설명

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

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

[풀이-DFS]

def solution(n, computers):
    visited = [False for _ in range(n)]
    answer = 0
    
    for com in range(n):
        if not visited[com]:
            dfs(n, computers, com, visited)
            answer +=1 
    return answer

def dfs(n, computers, com, visited):
    visited[com] = True
    for connect in range(n):
        if connect!=com and computers[com][connect]==1 and not visited[connect]:
            dfs(n, computers, connect, visited)
  • 주어진 이차원 배열을 통해 어떻게 체크해야할지 감이 잡하지 않았다.
  • 답을 보면 알겠는데 왜 스스로 생각해내진 못하는가!!!! ㅜㅜ

[다른 사람의 풀이]

def solution(n, computers):
    answer = 0
    visited = [0 for i in range(n)]
    def dfs(computers, visited, start):
        stack = [start]
        while stack:
            j = stack.pop()
            if visited[j] == 0:
                visited[j] = 1
            # for i in range(len(computers)-1, -1, -1):
            for i in range(0, len(computers)):
                if computers[j][i] ==1 and visited[i] == 0:
                    stack.append(i)
    i=0
    while 0 in visited:
        if visited[i] ==0:
            dfs(computers, visited, i)
            answer +=1
        i+=1
    return answer

'알고리즘 > 알고리즘 문제' 카테고리의 다른 글

[python] 백준 > 트리. 재귀 > 트리 순회(1991)  (0) 2021.02.26
[python] 프로그래머스 > 큐/스택 > 프린터  (0) 2021.02.25
[python] 백준 > 정렬 > 수 정렬하기2(2751)  (0) 2021.02.24
[python] 백준 > 구현, 시뮬레이션 > 주사위 굴리기(14499)  (0) 2021.02.23
[python] 프로그래머스 > 기능 개발  (0) 2021.02.23
    '알고리즘/알고리즘 문제' 카테고리의 다른 글
    • [python] 백준 > 트리. 재귀 > 트리 순회(1991)
    • [python] 프로그래머스 > 큐/스택 > 프린터
    • [python] 백준 > 정렬 > 수 정렬하기2(2751)
    • [python] 백준 > 구현, 시뮬레이션 > 주사위 굴리기(14499)
    happyso
    happyso

    티스토리툴바