본문 바로가기
Programming/Programmers

[프로그래머스] 네트워크(Python)

by 데이터현 2021. 10. 21.

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

 

코딩테스트 연습 - 네트워크

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

programmers.co.kr

참고

https://hkim-data.tistory.com/31?category=1016184 

 

#2-3 Python 코딩테스트 그리디 알고리즘 , DFS & BFS

https://www.youtube.com/watch?v=2zjoKjt97vQ&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=2 https://www.youtube.com/watch?v=7C9RgOcvkvo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=3 이 포스트는 위..

hkim-data.tistory.com

 

DFS (재귀함수 활용)

def solution(n, computers):
    visited = [False] * n
    answer = 0
    def dfs(computers, visited, now):
        visited[now] = True #현재위치 방문 표시
        for v in range(len(computers)):
            if visited[v] == False and computers[now][v] == 1:
                #방문하지 않았고 , 컴퓨터가 연결되어 있을 경우
                dfs(computers, visited, v)
                    
    while False in visited: # 모두 방문할때 까지
        for i in range(n): # 전체 탐색
            if visited[i] == False: # 방문하지 않았을 경우 
                dfs(computers, visited, i)# 탐색
                answer += 1
    return answer

 

DFS (스택 활용)

def dfs(idx,computers,visited):
    stack = [idx]
    while stack:
        idx = stack.pop()
        visited[idx] = True        
        for j in range(len(computers[idx])):
            if visited[j] == False and computers[idx][j] == 1:
                stack.append(j)

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

 

BFS (queue 활용)

from collections import deque

def solution(n,computers):
    answer = 0
    visited = [False for _ in range(n)]
    for i in range(n):
        if visited[i] == False:
            visited[i]=True
            queue = deque([i])
            print(queue)
            answer += 1
        while queue:
            idx = queue.popleft()
            visited[idx]=True
            for j in range(len(computers[idx])):
                if visited[j] == False and computers[idx][j] == 1:
                    queue.append(j)
    return answer

댓글