바이러스 문제는 DFS 또는 BFS 를 사용하여 해결할 수 있습니다

 

 

DFS를 구현하기 위해서는 재귀함수를 구현해야 합니다. 이전에 값들을 저장하기 위해서 visited 배열을 만들었습니다.

 

예제 입력 1

7
6
1 2
2 3
1 5
5 2
5 6
4 7

 

예제 출력 2

4

 

풀이

풀이를 해보면 바이러스 노드를 직접 구해봅니다.

 

1: 2 5

2: 1 3 5

3: 2

4: 7

5: 1 2 6

6: 5

7: 4

 

DFS는 계속해서 파고파고 들어가는 것이기 때문에 1 -> 2 -> 3 -> 5 -> 6 이므로 1 컴퓨터는 총 4대의 컴퓨터를 감염시켰습니다.

이제 위에 DFS를 직접 구현하여 해결하는 코드입니다.

import Foundation

let n = Int(readLine()!)!
let m = Int(readLine()!)!


if m <= 0 {
    print(0)
    exit(0)
}

var arr: [[Int]] = .init(repeating: .init(repeating: 0, count: n+1), count: n+1)

for _ in 1...m {
    let tmp = readLine()!.split(separator: " ").map { Int($0)! }
    arr[tmp[0]].append(tmp[1])
    arr[tmp[1]].append(tmp[0])
}


var visited: [Bool] = .init(repeating: false, count: n+1)
var count = 0
func dfs(m: Int) {
    visited[m] = true
    
    for i in arr[m] {
        if !visited[i] {
            count+=1
            dfs(m: i)
        }
    }
    
}
dfs(m: 1)
print(count >= 1 ? count-1 : 0)

'Algorithm > Baekjoon' 카테고리의 다른 글

C++ 2xn 타일링  (0) 2024.11.14
Swift - 백준 1927 최소 힙  (0) 2024.09.01
Swift - 백준 1541번  (0) 2024.08.30
Swift - 1463번 1로 만들기  (0) 2024.08.28
Swift - 백준 1764번 듣보잡  (0) 2024.08.28
ytw_developer