본문 바로가기

알고리즘/백준 문제풀이

백준 2606-바이러스(Kotlin)

728x90

https://www.acmicpc.net/problem/2606

 

2606번: 바이러스

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

www.acmicpc.net

 

문제 접근

딱 그래프 탐색을 할 수 있는지를 물어보는 문제

 

시간복잡도

인접 리스트를 활용한dfs로 계산시 O(V+E)인데, 간선이 얼마나 주어지는 지를 모르겠다..

인접 행렬로 구현하면 O(V^2)인데, 이때 V(노드, 여기선 컴퓨터의 수)는 100이하니깐 100^2으로 여유롭다.

그보다도 O(V+E)가 더 작으니깐 어떤걸쓰든 그래프 탐색을 할 줄 아느냐를 물어보는 문제인듯

 

인접리스트 + DFS로 구현

import java.util.*
import kotlin.collections.ArrayList

var n = 0
var g = Array(n+1){ArrayList<Int>()}
val check = BooleanArray(1001)
var count = 0
fun main(args: Array<String>): Unit = with(Scanner(System.`in`)) {
   n = nextInt()
    g = Array(n+1){ArrayList<Int>()}
    val edge = nextInt()
    for (i in 0 until edge){
        val a = nextInt()
        val b = nextInt()
        graph(a,b)
    }
    dfs(1)
    //1번과 연결되어있는 컴퓨터의 수를 구하시오(1번 제외)
print(count)
}

fun graph(a:Int, b:Int){
    g[a].add(b)
    g[b].add(a)
}
fun dfs(start:Int){
    check[start] = true

    for (i in 1..n){
        if (g[i].contains(start) && !check[i]){
            count++
            dfs(i)
        }
    }
}

'알고리즘 > 백준 문제풀이' 카테고리의 다른 글

백준 14501- 퇴사(kotlin)  (0) 2023.02.08
백준 9095번 - 1, 2, 3 더하기  (0) 2023.02.08
백준 1260-DFS와 BFS(Kotlin)  (0) 2023.02.05
백준 2576 색종이-2(Kotlin)  (0) 2023.02.02
백준 2246 - 콘도 선정(Kotlin)  (0) 2023.01.31