๊ฒฝ๋ก ์ฐพ๊ธฐ(11403๋ฒ)
Silver 1
#๊ทธ๋ํ ์ด๋ก #๊ทธ๋ํ ํ์ #์ต๋จ ๊ฒฝ๋ก #ํ๋ก์ด๋-์์
https://www.acmicpc.net/problem/11403
๋ฌธ์ ๋ด์ฉ
๋ฌธ์ ์ ๊ทผ
๊ทธ๋ํ์์ ์ ์ ์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค.
์ ๋ ฅ ๋ฆฌ์คํธ ํฌ๊ธฐ๋ N * N์ด๊ณ , ํ ์ค์ ์ ์ ์ด ์ฌ๋ฌ ๊ฐ์ด๊ฑฐ๋ ์์ ์๋ ์๋ค.
i๋ฒ์งธ ์ค์ ์ ์ ์ด ์์ผ๋ฉด i๋ฒ์งธ ์ค์ j๋ฒ์งธ ๋ฐ์ดํฐ์ ์์ ๊ฑด๋ฐ, j๋ฒ์งธ ์ค์ ์ ๋ ฅ๊ฐ์ผ๋ก ๊ฐ์ ์ ์ ์ด ์กด์ฌํ๋์ง ํ์ธํ๋ ์์ ์ ํด์ผ ํ๋ค.
์์ธํ๊ฒ ์ค๋ช ํ์๋ฉด, ์ ๋ ฅ ์์ 2๋ฅผ ์๋ก ๋ค๊ฒ ๋ค.
7
0 0 0 1 0 0 0 // 3
0 0 0 0 0 0 1 // 6
0 0 0 0 0 0 0 //
0 0 0 0 1 1 0 // 4, 5
1 0 0 0 0 0 0 // 0
0 0 0 0 0 0 1 // 6
0 0 1 0 0 0 0 // 2
7์ด ์ ์ ์ ๊ฐ์์ด๋ฏ๋ก ์ ๋ ฅ์ 7 * 7๋ก ์ ๋ ฅ๋๋ค.
๋ฆฌ์คํธ๋ก ์ ๋ ฅ๋ฐ๊ธฐ ๋๋ฌธ์ 0๋ฒ์งธ ์ค๋ถํฐ ํ์ธ์ ํด๋ณด๋ฉด 0๋ฒ์งธ ์ค์๋ 3๋ฒ์งธ ๊ฐ์ ์ ์ ์ด ์กด์ฌํ๋ค.
๊ทธ๋ฌ๋ฉด ์ ๋ ฅ๋ฐ์ ๊ฐ์ 3๋ฒ์งธ ์ค๋ก ์ด๋ํ๋ค. 3๋ฒ์งธ ์ค์๋ 4, 5๋ฒ์งธ์ ์ ์ ์ด ์กด์ฌํ๋ค.
2๊ฐ์ง๊ฐ ์กด์ฌํ๋ฏ๋ก ๋จผ์ 4๋ฒ์งธ ์ค๋ก ์ด๋ํด ๋ณด๋ฉด 0๋ฒ์งธ ๊ฐ์ ์ ์ ์ด ์๊ธฐ ๋๋ฌธ์ 0๋ฒ์งธ ์ค๋ก ๊ฐ๋๋ฐ, ์ด ๋๋ ์ด๋ฏธ ์ง๋์๋ ๋ฐ์ดํฐ์ด๋ฏ๋ก ์ข ๋ฃ๋๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ง๊ธ๊น์ง 0 -> 3 -> 4 ์์๋๋ก ์ด๋ํ์๋ค.
์ด๋ก ์ธํด 0๋ฒ์งธ ์ค์๋ 3, 4๋ฒ์งธ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ ์ด ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ 1๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ์๋์ ๊ฐ๋ค.
1 0 0 1 1 0 0
์ด์ ์๊น 3๋ฒ์งธ ์ค์ ์ง๋ฌ์ ๋ 4, 5๋ฒ์งธ ์ค์ ํ์ธํ๊ธฐ ๋๋ฌธ์ ์ด์ 5๋ฒ์งธ ์ค์ ํ์ธํ๋ค.
5๋ฒ์งธ ์ค์๋ 6๋ฒ์งธ์ ์ ์ ์ด ์์ผ๋ฏ๋ก 6๋ฒ์งธ ์ค๋ก ์ด๋ํ๋ฉด 2๋ฒ์งธ ๊ฐ์ด ์ ์ ์ด๊ธฐ ๋๋ฌธ์ 2๋ฒ์งธ ์ค๋ก ์ด๋ํ๋ค.
2๋ฒ์งธ ์ค์๋ ์ด๋ค ์ ์ ๋ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ข ๋ฃ๋๊ฒ ๋๋ค.
๋ฐฉ๊ธ๊น์ง์ ์ด๋์ผ๋ก 5 -> 6 -> 2 ์์ผ๋ก ์ด๋ํ๊ธฐ์ ๊ธฐ์กด ๋ณ๊ฒฝ๋ ๋ฆฌ์คํธ์ ์๋กญ๊ฒ 1์ ์ถ๊ฐํด ์ฃผ๋ฉด ์ต์ข ์ ์ธ ๋ฆฌ์คํธ๋ ์๋์ ๊ฐ๋ค.
1 0 1 1 1 1 1 1
์ถ๋ ฅ ์์ 2์ ์ฒซ ์ค๊ณผ ๋์ผํด์ง ๊ฒ์ ํ์ธํ ์ ์๋ค.
์๋์ 6์ค๋ ๋ชจ๋ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋๋ค.
์ด ๊ณผ์ ์ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์ง๋ง, ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ฅด๊ณ ์์ด๋ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
๋ฌธ์ ํด๊ฒฐ ์ฝ๋
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.LinkedList
import java.util.Queue
private var graph = arrayOf<List<Int>>()
private var result = arrayOf<Int>()
private var visited = booleanArrayOf()
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val point = readLine().toInt()
graph = Array(point) { listOf() }
result = Array(point) { 0 }
visited = BooleanArray(point)
for (i in 0 until point) {
val path = readLine().split(" ").map { it.toInt() }
graph[i] = path
}
for (i in graph.indices) {
for (j in graph[i].indices) {
if (!visited[i] && graph[i][j] == 1) {
bfs(j)
}
}
println(result.joinToString(" "))
visited.fill(false)
result.fill(0)
}
}
private fun bfs(x: Int) {
val queue: Queue<Int> = LinkedList()
queue.add(x)
result[x] = 1
visited[x] = true
while (queue.isNotEmpty()) {
val dataX = queue.poll()
for (i in 0 until graph[dataX].size) {
if (!visited[i] && graph[dataX][i] == 1) {
visited[i] = true
queue.add(i)
result[i] = 1
}
}
}
}
๋ฌธ์ ํ์ด
์ ๋ ฅ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ graph๋ฅผ ์์ฑํ๋ค.
์ถ๋ ฅ์ ์ค๋ง๋ค ๊ฐ๋ณ๋ก ํ๊ธฐ ์ํด result๋ฅผ ์์ฑํด ์ฃผ๊ณ , result๋ฅผ ์ด์ฉํด ์ถ๋ ฅ์ ํ๊ธฐ ๋๋ฌธ์ visited๋ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ค ํ์๊ฐ ์๋ค.
์ฒ์์ ๊ฐ์ graph์ ์ ๋ ฅ๋ฐ์ ์ฃผ๊ณ 2์ค ๋ฐ๋ณต์ ๋์์ bfs ํจ์๋ฅผ ์ํํ๋ค.
j๋ฒ์งธ ๊ฐ์ visited๊ฐ false์ผ ๋์ graph์ ๊ฐ์ด 1์ผ ๋๋ง ์ํํ๋ค. ํ ์ค์ 1(์ ์ )์ด ์ฌ๋ฌ ๊ฐ ์์ ์๋ ์์ด์ 1๋ฒ๋ง ํธ์ถํ๋ฉด ์ ๋๋ค.
bfs์์๋ queue๋ฅผ ์ด์ฉํด ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ค.
์ด๊ธฐ์ ํ๋ผ๋ฏธํฐ๊ฐ์ queue์ ๋ฃ์ด ์ฃผ๊ณ , queue๊ฐ ๋น ๋๊น์ง ๊ณ์ ์ํํ๋ค.
queue์ ๋ฃ๋ ์กฐ๊ฑด์ ์์ ์กฐ๊ฑด๊ณผ ๋์ผํ๋ค. dataX ๋ณ์์ graph์ ๋ช ๋ฒ์งธ ์ค์ ํ์ํด์ผ ํ๋์ง ํ์ ํ๊ณ , dataX๋ฒ์งธ ์ค์ 1์ด ์๊ณ , 1์ด ๋ช ๋ฒ์งธ ๊ฐ์ธ์ง ํ์ธํด ๋์ผํ index์ visited๊ฐ false์ธ ๊ฒ์ ๋ง์กฑํด์ผ ํ๋ค.
queue์ ๊ฐ์ ๋ฃ๊ณ , ๊ฐ์ ์ 1๋ก ํ์ํด ์ค๋ค.
bfs ์ข ๋ฃ ํ ๋ณ๊ฒฝ๋ result List๋ฅผ ์ถ๋ ฅํ๋ค.
์ถ๋ ฅ ํ, result์ visited๋ฅผ ์ด๊ธฐ์ ํํ๋ก ์ด๊ธฐํํ๋ค. ๋ค์ ๊ฐ์ ์จ์ผ ํ๋๊น.
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
๋ฌธ์ ์ดํด๊ฐ ์ ์ผ ์ด๋ ต๋ค..
์ค๋ช ์ด ๋ญ๊ฐ ๋๋ฃจ๋ญ์ ํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฅ ๋์ ๊น๋ง๋ ์ด์์ผ ์๋ ์๋ค.
๋ฌธ์ ์ดํด๊ฐ ๋๋ฌด ์ด๋ ค์์ ๋ฌธ์ ์ ๊ทผ๋ฒ์ ์ข ์ฐพ์๋ณด๋๊น ๋ฐ๋ก ์ดํด๊ฐ ๋๋๋ผ.
'๐ฏ | ๋ฐฑ์ค > ๐ | Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin, S5] ๋ฐฑ์ค 1813๋ฒ ๋ ผ๋ฆฌํ ๊ต์ (0) | 2024.08.16 |
---|---|
[Kotlin, S3] ๋ฐฑ์ค 15649๋ฒ N๊ณผ M(1) (0) | 2024.08.13 |
[Kotlin, S1] ๋ฐฑ์ค 6064๋ฒ ์นด์ ๋ฌ๋ ฅ (0) | 2024.08.11 |
[Kotlin, S3] ๋ฐฑ์ค 31883๋ฒ FA์์ ์ง (0) | 2024.08.09 |
[Kotlin, S5] ๋ฐฑ์ค 9196๋ฒ ์ ์ ์ง์ฌ๊ฐํ (0) | 2024.08.09 |