코테 공부/python

[프로그래머스] #43162 Python 네트워크

sweet-po 2023. 10. 16. 17:00

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

내 풀이

나는 dfs 재귀로 풀었는데 

#dfs
def dfs(v, visited, computers, li):
    if not visited[v]:
        visited[v] = True
        for i in range(len(computers)):
            if computers[v][i] == 1:
                li[-1].append(i)
                dfs(i, visited, computers, li)

def solution(n, computers):
    visited = [False for i in range(n)]
    li = []
    for l in range(n):
        if not visited[l]:
            li.append([])
            dfs(l, visited, computers, li)
    
    return len(li)

 

타풀이

def solution(n, computers):
    temp = []
    for i in range(n):
        temp.append(i)
    for i in range(n):
        for j in range(n):
            if computers[i][j]:
                for k in range(n):
                    if temp[k] == temp[i]:
                        temp[k] = temp[j]
    return len(set(temp))

플로이드 워셜을 썼다는 다른 풀이를 보자니 마지막 if문 부분이 헷갈린다ㅠ

같은 네트워크면 temp의 숫자를 같게 바꿔주는건 알겠는데...

i와 j가 연결된 네트워크라면 경유하는 k 컴퓨터가 i 와 같은 네트워크라면 j 컴퓨터와 같은 네트워크 이므로 temp 의 숫자를 j 컴퓨터와 같게 한다.. 인거 같은데..

for문을 돌면서 k가 i와 숫자가 같아졌을 경우 temp[i]의 값이 temp[j]와 같아질거고 그럼 그 이후에 temp[k]는 변경된 temp[i]와 비교하게 되는 건가? 

앗쉬 헷갈려.. print 찍어봐도 헷갈리네..