2606번: 바이러스백준/문제2023. 8. 10. 14:15
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/2606
언어 : Kotlin
문제 설명 :
신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.
예를 들어 7대의 컴퓨터가 <그림 1>과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다.
어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 출력하는 프로그램을 작성하시오.
- 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어진다. 이어서 그 수만큼 한 줄에 한 쌍씩 네트워크 상에서 직접 연결되어 있는 컴퓨터의 번호 쌍이 주어진다.
- 1번 컴퓨터가 웜 바이러스에 걸렸을 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 첫째 줄에 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
7 6 1 2 2 3 1 5 5 2 5 6 4 7 |
4 |
풀이 :
import java.io.*
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val cNum = br.readLine().toInt()
val connect = br.readLine().toInt()
val tree = Array(cNum + 1) { mutableListOf<Int>() }
repeat(connect) {
val (x, y) = br.readLine().split(" ").map { it.toInt() }
tree[x].add(y)
tree[y].add(x)
}
bw.write("${bfs(cNum, tree)}")
bw.flush()
bw.close()
}
fun bfs(node: Int, tree: Array<MutableList<Int>>): Int {
val queue = ArrayDeque<Int>()
val visited = Array(node + 1) { false }
queue.add(1)
visited[1] = true
while (queue.isNotEmpty()) {
val current = queue.removeFirst()
tree[current].forEach {
if (!visited[it]) {
visited[it] = true
queue.add(it)
}
}
}
return visited.filter { it }.size - 1
}
처음에 hash로 접근했다 틀리고 bfs로 갈아탔다
'백준 > 문제' 카테고리의 다른 글
11659번: 구간 합 구하기 4 (0) | 2023.08.11 |
---|---|
9461번: 파도반 수열 (0) | 2023.08.10 |
9095번: 1, 2, 3 더하기 (0) | 2023.08.09 |
9375번: 패션왕 신해빈 (0) | 2023.08.09 |
2579번: 계단 오르기 (0) | 2023.08.08 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!