728x90
https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍
www.acmicpc.net
Code
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.*
fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))){
val computerCount = readLine().toInt()
val times = readLine().toInt()
var graph = Array(computerCount+1, {BooleanArray(computerCount+1,{false})})
var visited = BooleanArray(computerCount+1, {false})
visited[1] = true
repeat(times){
val (fir, sec) = readLine().split(" ")
graph[fir.toInt()][sec.toInt()] = true
graph[sec.toInt()][fir.toInt()] = true
}
var starPoint : Queue<Int> = LinkedList()
starPoint.add(1)
var cnt = 0
while (starPoint.isNotEmpty()) {
var num = starPoint.poll()
for (i in 1..computerCount) {
if (graph[num][i] && !visited[i]) {
cnt++
visited[i] = true
starPoint.add(i)
}
}
}
val bw = BufferedWriter(OutputStreamWriter(System.out))
bw.write("${cnt}")
bw.flush()
bw.close()
}
이 문제는 전형적인 Graph 문제다.
완전탐색 문제이기 때문에 BFS든 DFS든 본인이 더 좋아하는 방식으로 구현하면 된다.
입력받는대로 2차원 배열에 표시하고, BFS를 활용해서 탐색을 시작한다.
내가 안가본 곳이라면 방문했다는 기록을 남기고 값을 Queue에 추가하여 BFS를 쭉 이어간다.
사실 이거말고는 추가적으로 설명할게 없다. 전형적인 BFS문제였고, Queue에 추가하는 조건 정도만 정하면 되는 문제였다.
728x90