Algorithm/Baekjoon

[Swift] 2606번: 바이러스

내일은개발천재🎵 2022. 4. 2. 10:59

 

  문제  

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어

www.acmicpc.net


  알고리즘  

DFS 사용

1. DFS를 수행한다.(시작노드 = 1)
2. 방문한 노드의 개수를 구한 후 1을 빼서 출력한다.
    ( 1에 의해 바이러스에 걸린 컴퓨터의 개수 => 1은 포함하지 않음)

  나의 코드  

// dfs
func dfs(n: Int){
    visited[n] = true
    for i in graph[n]{
        if !visited[i]{
            dfs(n: i)
        }
    }
}

// 선언 및 초기화
let node: Int = Int(readLine()!)!
let edge: Int = Int(readLine()!)!
var graph = [[Int]].init(repeating: [], count: node + 1)
var visited = [Bool].init(repeating: false, count: node+1)

// 그래프 입력받기
for _ in 1...edge{
    let info = readLine()!.split(separator: " ").map{ Int(String($0))! }
    graph[info[0]].append(info[1])
    graph[info[1]].append(info[0])
}

// dfs 수행(시작노드 = 1)
dfs(n: 1)

// 1에 의해 감염된 컴퓨터의 개수
// 방문한 노드의 개수를 구한 후 1을 뺌
print( visited.filter{($0) == true}.count - 1 )

  Key point!  

📍DFS / BFS 개념 및 코드

 

[Algorithm] DFS / BFS 탐색 알고리즘

  DFS / BFS  DFS BFS 탐색 방법 깊이 우선 탐색 (시작 노드 선택은 자유롭지만, 관행적으로 번호가 낮은 순서부터 처리한다.) 너비 우선 탐색 (가까운 것 먼저) 자료구조 / 구현 방법 스택 자료구조

zest1923.tistory.com