상세 컨텐츠

본문 제목

바이러스(백준)

코딩테스트

by dofury 2023. 7. 28. 11:17

본문

728x90

package com.dofury.kotlin

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.lang.Integer.max

class Graph(numVertices: Int){

    var adjLists = Array(numVertices+1) { mutableSetOf<Int>()}

    fun addEdge(src: Int, dest:Int){
        adjLists[src].add(dest)
    }
}

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.`out`))
    val count = br.readLine().toInt()
    val g = Graph(count)
    val connectCount = br.readLine().toInt()

    repeat(connectCount){
        val (src, dest) = br.readLine().split(' ').map { it.toInt() }
        g.addEdge(src,dest)
        g.addEdge(dest,src)
    }
    bw.write("${bfs(g,1)}")


    bw.flush()
    bw.close()
    br.close()

}

fun bfs(graph: Graph, v: Int,): Int{
    val visited = mutableListOf<Int>()

    val queue = ArrayDeque<Int>()
    queue.addLast(v)
    visited.add(v)

    while (!queue.isEmpty()){

        val n = queue.removeFirst()

        for(i in graph.adjLists[n]){
            if(i !in visited){
                queue.addLast(i)
                visited.add(i)
            }
        }
    }
    return if(visited.isEmpty()){0}
    else{ visited.size-1 }
}

케빈 베이컨의 6단계 법칙에 사용했던 그래프 클래스와 BFS 알고리즘을 활용하여 문제를 풀었다.

방문한 노드의 크기만 구하면 되는 쉬운 문제였다. 

중요한건 1에서 부터 시작해서 만나게되는 노드의 수이기 때문에 1 자신을 제외해야한다.

728x90

'코딩테스트' 카테고리의 다른 글

카드2(백준)  (0) 2023.08.14
색종이 만들기(백준)  (0) 2023.08.02
계단 오르기(백준)  (0) 2023.07.27
유기농 배추(백준)  (0) 2023.07.26
케빈 베이컨의 6단계 법칙  (0) 2023.07.25

관련글 더보기

댓글 영역