11724번: 연결 요소의 개수백준/문제2023. 8. 15. 13:20
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/11724
언어 : Kotlin
문제 설명 :
방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.
- 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.
- 첫째 줄에 연결 요소의 개수를 출력한다.
제한 사항 :
- 시간 제한 : 3초
- 메모리 제한 : 512MB
입출력 예 :
입력 | 출력 |
6 5 1 2 2 5 5 1 3 4 4 6 |
2 |
6 8 1 2 2 5 5 1 3 4 4 6 5 4 2 4 2 3 |
1 |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val (n, m) = br.readLine().split(" ").map { it.toInt() }
val tree = Array(n + 1) { MutableList(n + 1) { 0 } }
val visited = Array(n + 1) { false }
var cnt = 0
repeat(m) {
val (u, v) = br.readLine().split(" ").map { it.toInt() }
tree[u][v] = 1
tree[v][u] = 1
}
for (i in 1 .. n) {
if (!visited[i]) {
bfs(i, n, tree, visited)
cnt++
}
}
bw.write("$cnt")
bw.flush()
bw.close()
}
fun bfs(node: Int, n: Int, tree: Array<MutableList<Int>>, visited: Array<Boolean>): Array<Boolean> {
val queue = ArrayDeque<Int>()
queue.add(node)
visited[node] = true
while (queue.isNotEmpty()) {
val current = queue.removeFirst()
for (i in 1 .. n) {
if (!visited[i] && tree[current][i] == 1) {
visited[i] = true
queue.add(i)
}
}
}
return visited
}
'백준 > 문제' 카테고리의 다른 글
1931번: 회의실 배정 (0) | 2023.08.16 |
---|---|
1697번: 숨바꼭질 (0) | 2023.08.15 |
2630번: 색종이 만들기 (0) | 2023.08.14 |
1927번: 최소 힙 (0) | 2023.08.14 |
11726번: 2xn 타일링 (0) | 2023.08.14 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!