코테 공부/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 찍어봐도 헷갈리네..