[프로그래머스 LV3] 네트워크

Junyoung Park·2022년 8월 11일
0

코딩테스트

목록 보기
545/631
post-thumbnail

1. 문제 설명

네트워크

2. 문제 분석

연결 그래프를 구한 뒤, 특정 노드에서 BFS를 돌리면서 방문한 노드를 전체 노드에서 하나씩 제거해 나간다. 모든 노드를 방문할 때까지 (시작 노드를 갱신하면서) 방문하자. 이때 BFS를 사용한 횟수가 곧 네트워크의 개수다.

3. 나의 풀이

import Foundation

func solution(_ n:Int, _ computers:[[Int]]) -> Int {
    var nodes = Array(repeating: [Int](), count: n)
    var checked = [Int]()
    for i in 0..<n {
        checked.append(i)
    }
    
    for i in 0..<n {
        for j in i+1..<n {
            if i == j {
                continue
            } else if computers[i][j] == 1 {
                nodes[i].append(j)
                nodes[j].append(i)
            }
        }
    }
    
    var total = 0
    
    while !checked.isEmpty {
        let startNode = checked.removeFirst()
        var queue = [Int]()
        queue.append(startNode)
        var index = 0
        
        while queue.count > index {
            let curNode = queue[index]
            
            for nextNode in nodes[curNode] {
                if checked.contains(nextNode) {
                    queue.append(nextNode)
                    let checkedIdx = checked.firstIndex(of: nextNode)!
                    checked.remove(at: checkedIdx)
                }
            }
            index += 1
        }
        total += 1
    }
    return total
}
profile
JUST DO IT

0개의 댓글