๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ฏ | ๋ฐฑ์ค€/๐Ÿ™‚ | Silver

[Kotlin, S1] ๋ฐฑ์ค€ 11403๋ฒˆ ๊ฒฝ๋กœ ์ฐพ๊ธฐ

by immgga 2024. 8. 11.

์ถœ์ฒ˜: unsplash.com

 

๊ฒฝ๋กœ ์ฐพ๊ธฐ(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๋ฅผ ์ดˆ๊ธฐ์˜ ํ˜•ํƒœ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ๋‹ค์Œ ๊ฐ’์— ์จ์•ผ ํ•˜๋‹ˆ๊นŒ.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

๋ฌธ์ œ ์ดํ•ด๊ฐ€ ์ œ์ผ ์–ด๋ ต๋‹ค..

์„ค๋ช…์ด ๋ญ”๊ฐ€ ๋‘๋ฃจ๋ญ‰์ˆ ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ƒฅ ๋‚˜์˜ ๊นŒ๋ง‰๋ˆˆ ์ด์Šˆ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

๋ฌธ์ œ ์ดํ•ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์›Œ์„œ ๋ฌธ์ œ ์ ‘๊ทผ๋ฒ•์„ ์ข€ ์ฐพ์•„๋ณด๋‹ˆ๊นŒ ๋ฐ”๋กœ ์ดํ•ด๊ฐ€ ๋˜๋”๋ผ.

728x90