date posted: 2020-03-26
문제설명: 네트워크
알고리즘을 공부했어도 그것을 문제풀때 사용하는것은 쉽지 않네요.
일단 이번문제는 컴퓨터끼리 이어져있고 또 바로 안이어져 있더라도 다른 컴퓨터를 통해서 연결이 가능하니까 바로 DFS 문제라는걸 알았어요. 처음 컴퓨터를 정하고 그와 연결되있는 컴퓨터로 가고 또 연결되있는 컴퓨터를 찾아 모든 컴퓨터를 찾으면 그게 하나의 네트워크죠 그리고 만약 주어진 컴퓨터가 그 네트워크 안에 없엇다면 그중 컴퓨터에서 다시한번 DFS 를 실행하면 네트워크를 찾고 또 컴퓨터가 그 네트워크에 없다면 없는 컴퓨터에 DFS 를 실행해주면 됩니다.
DFS 를 어떤식으로 진행하는지 다시한번 되새겨 봅시다.
def solution(n, computers): answer = 0 stack = [] visit = [False]*n for i in range(n): if visit[i] is True: continue stack.append(i) answer += 1 while stack: now = stack.pop() visit[now] = True for j in range(n): if computers[now][j] == 1 and visit[j] is False: stack.append(j) return answer
흠... 이번에도 혼자 풀지는 못했네요. 위에 답은 O(n^2) 인데 조금더 Time complexity 를 줄일 방법을 생각해봅시다.