💬 문제
https://school.programmers.co.kr/learn/courses/30/lessons/43162
💬 Idea
네트워크를 표현하는 연결 리스트 그래프를 먼저 만든 후, 0부터 시작하여 연결된 모든 노드를 탐색한다.
- 이렇게 한 네트워크망이 생성되면 +1을 한다.
- 네트워크망 생성 후 아직 탐색되지 않은 노드가 남아있다면, 해당 노드를 start로 하여 또 다른 네트워크망이 있는지 탐색한다.
- 네트워크가 남아있지 않을때까지 1-2를 반복한다.
💬 풀이
func solution(n:Int, computers:[[Int]])->Int{varnetworkDict:[Int:[Int]]=[:]for(i, ci)in computers.enumerated(){ifnetworkDict[i]==nil{networkDict[i]=[]}for(j, _)in ci.enumerated(){ifcomputers[i][j]==1{networkDict[i]?.append(j)}}}returndfsToFindNetwork(networkDict,0)}func dfsToFindNetwork(_ arr:[Int:[Int]], _ start:Int)->Int{vararr= arr
varnetworkCount=0varneedVisitStack:[Int]=[start]varvisitedQueue:[Int]=[]while !needVisitStack.isEmpty {letnode= needVisitStack.removeLast()if visitedQueue.contains(node){continue}
visitedQueue.append(node)
needVisitStack +=arr[node]??[]if((arr[node]?.isEmpty)!=nil){
arr.removeValue(forKey: node)}}
networkCount +=1if arr.count >0{
networkCount +=dfsToFindNetwork(arr, arr.first!.key)}return networkCount
}
💬 문제https://school.programmers.co.kr/learn/courses/30/lessons/43162
💬 Idea네트워크를 표현하는 연결 리스트 그래프를 먼저 만든 후, 0부터 시작하여 연결된 모든 노드를 탐색한다.
💬 풀이