본문 바로가기

알고리즘

[프로그래머스 고득점 Kit - dfs/bfs] 네트워크

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

# 프로그래머스 특성상 visited를 인자로 넘겨주는 게 더 편함!
def visit(k, graph, visited):
    # 방문 처리
    visited[k] = 1
    for i in range(len(graph[k])):
        if visited[i] == 0 and graph[k][i] == 1:
            visit(i, graph, visited)

def solution(n, computers):

    visited = [0] * n

    answer = 0

    for i in range(n):
    	# 내가 함수로 썼던 check 부분도 사실 이 한 줄이면 된다 !!
        if visited[i] == 0:
            visit(i, computers, visited)
            # answer만 추가해주면 되는데 !!
            answer += 1

    return answer

 

visited = []

#visited 배열 모두 -1인지 아닌지 체크
def check_visited():
    global visited
    for i in range(len(visited)):
        if visited[i] == -1:
            return i
    return -1

def dfs(computers,index,c):
    global visited
    # 현재 노드 방문 처리
    visited[c] = index
    # 인접한 노드 중에 방문하지 않았다면 dfs추가
    for i in range(len(computers[c])):
        if visited[i] == -1 and computers[c][i] == 1:
            dfs(computers,index,i)

def solution(n, computers):
    global visited
    visited =[-1] * n
    answer = 0
    index = 1
    while True:
        c = check_visited()
        if c == -1:
            break
        dfs(computers,index,c)
        index += 1
    answer = max(visited)
    return answer
반응형