๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ฏ | ๋ฐฑ์ค€/๐Ÿ˜ | Gold

[Kotlin, G5] ๋ฐฑ์ค€ 7569๋ฒˆ ํ† ๋งˆํ† 

by immgga 2024. 7. 29.

์ถœ์ฒ˜: unsplash.com

 

ํ† ๋งˆํ† (7569๋ฒˆ)

Gold 5

#๊ทธ๋ž˜ํ”„ ์ด๋ก  #๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ #๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰

 

๋ฌธ์ œ ๋‚ด์šฉ

 

๋ฌธ์ œ ์ ‘๊ทผ

๋น„์Šทํ•œ ๋ฌธ์ œ์ธ ํ† ๋งˆํ† (7576)์™€๋Š” ์ƒ์ž๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋ฐ›์•„ 3์ฐจ์›์œผ๋กœ ์ž‘์—…ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋‹ค๋ฅด๋‹ค.

์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ, ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ ArrayDeque์— 1(์ต์€ ํ† ๋งˆํ† )์ด ๋“ค์–ด ์žˆ์œผ๋ฉด x, y, z, 0์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ›์•„์„œ ๋„ฃ์–ด ์ค€๋‹ค.

x, y, z๋Š” ์ต์€ ํ† ๋งˆํ† ์˜ ์ขŒํ‘œ์ด๊ณ , 0์€ ๊ฒฝ๊ณผํ•œ ๋‚ ์งœ๋ฅผ ๋œปํ•œ๋‹ค. ๋‚˜์ค‘์— 0์„ ํ•˜๋‚˜์”ฉ ๋”ํ•ด ๊ฐ€๋ฉด์„œ ๊ฒฝ๊ณผ ๋‚ ์งœ๋ฅผ ์ฒดํฌํ•  ๊ฒƒ์ด๋‹ค.

3์ฐจ์› ๋ฆฌ์ŠคํŠธ์— ์ž…๋ ฅ๊ฐ’์„ ๋ชจ๋‘ ๋„ฃ์–ด ์ฃผ๊ณ  ๋‚˜์„œ, ํ† ๋งˆํ† ๋ฅผ bfs๋ฅผ ์ด์šฉํ•ด ํ˜„์žฌ ํ† ๋งˆํ† ์˜ ์œ„์น˜๋ฅผ ๋‹ด์€ ArrayDeque์— ์žˆ๋Š” ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋นผ๋ฉด์„œ ๋บ€ ๊ฐ’์˜ x, y, z์—์„œ ์•ž, ๋’ค, ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ, ์œ„, ์•„๋ž˜์— ํ•ด๋‹นํ•˜๋Š” ํ† ๋งˆํ† ๋“ค์„ ํ™•์ธํ•ด์„œ ๋œ ์ต์€ ํ† ๋งˆํ† (0)์ด๋ฉด, ํ† ๋งˆํ† 

๋ฅผ ์ต์€ ์ƒํƒœ(1)๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํ์— ์ด๋™ํ•œ x, y, z๊ฐ’์— ์ด์ „์— ArrayDeque์—์„œ ๋บ€ ๊ฐ’์— ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚ฌ๋‹ค๋Š” ๋œป์ธ 1์„ ๋”ํ•œ ๊ฐ’์„ 4๋ฒˆ์งธ ์ถ”๊ฐ€๊ฐ’์— ๋„ฃ์–ด์„œ ArrayDeque์˜ ๋งจ ์•ž์— ๋„ฃ์–ด ์ค€๋‹ค.

 

๋ฌธ์ œ ํ•ด๊ฒฐ ์ฝ”๋“œ

๋”๋ณด๊ธฐ
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.ArrayDeque

private val queue = ArrayDeque<List<Int>>()
private var box = arrayOf<Array<MutableList<Int>>>()

private val dx = listOf(-1, 1, 0, 0, 0, 0)
private val dy = listOf(0, 0, -1, 1, 0, 0)
private val dz = listOf(0, 0, 0, 0, -1, 1)

private var currentDay = 0

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val (x, y, z) = readLine().split(" ").map { it.toInt() }
    box = Array(z) { Array(y) { mutableListOf() } }

    for (i in 0 until z) {
        for (j in 0 until y) {
            val tomato = readLine().split(" ").map { it.toInt() }
            box[i][j].addAll(tomato)

            for (k in tomato.indices) {
                if (tomato[k] == 1) {
                    queue.addFirst(listOf(k, j, i, 0))
                }
            }
        }
    }

    bfs()

    for (i in box.indices) {
        for (j in box[i].indices) {
            if (box[i][j].contains(0)) {
                currentDay = -1
                break
            }
        }
    }

    println(currentDay)
}

private fun bfs() {
    while (queue.isNotEmpty()) {
        val data = queue.removeLast()
        currentDay = data.last()

        find(data[0], data[1], data[2])
    }
}

private fun find(x: Int, y: Int, z: Int) {
    for (i in dx.indices) {
        val mx = x + dx[i]
        val my = y + dy[i]
        val mz = z + dz[i]

        if (mz in box.indices && my in box[0].indices && mx in box[0][0].indices) {
            if (box[mz][my][mx] == 0) {
                box[mz][my][mx] = 1
                queue.addFirst(listOf(mx, my, mz, currentDay + 1))
            }
        }
    }
}

 

๋ฌธ์ œ ํ’€์ด

์ž…๋ ฅ๊ฐ’์„ ์ €์žฅํ•  3์ฐจ์› ๋ฆฌ์ŠคํŠธ box์— ์ž…๋ ฅ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , ์ดˆ๊ธฐ์˜ ์ต์€ ํ† ๋งˆํ† ์˜ ์ขŒํ‘œ๋ฅผ ์ €์žฅํ•  queue(ArrayDeque)๋ฅผ ์ƒ์„ฑํ•ด ์ค€๋‹ค.

์ต์€ ํ† ๋งˆํ† ์˜ ์ขŒํ‘œ์—์„œ ์œ„, ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ, ์•ž, ๋’ค์— ํ•ด๋‹นํ•˜๋Š” ์ฃ„ํ‘œ๋“ค์˜ ํ† ๋งˆํ† ์˜ ๊ฐ’์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด dx, dy, dz๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

์ž…๋ ฅ๊ฐ’์„ box์— ์ €์žฅํ•˜๊ณ , queue์— ์ดˆ๊ธฐ์˜ ์ต์€ ํ† ๋งˆํ† ์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‚˜๋ฉด bfs ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

bfs์—์„œ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ bfs๋ฅผ ๊ตฌํ˜„ํ•˜๋“ฏ์ด queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด ์ฃผ๊ณ , queue์—์„œ ๋ฝ‘๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ˜„์žฌ queue์˜ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„ ์ค€๋‹ค(์ด์œ ๋Š” ๋‚˜์ค‘์— ์„ค๋ช…).

ํ˜„์žฌ ๋‚ ์งœ๋ฅผ data์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

๊ทธ๋‹ค์Œ x, y, z๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” find ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

find ํ•จ์ˆ˜์—์„œ๋Š” dx, dy, dz๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค ๊ฐ๊ฐ ์ด๋™ํ•œ ๊ฐ’์„ mx, my, mz๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ๊ณ  ๊ฐ ์ด๋™ํ•œ ๊ฐ’์ด 3์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ๋„˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธ ํ›„, ๋œ ์ต์€ ํ† ๋งˆํ† (0)๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ๊ฐ’์„ 1(์ต์Œ)๋กœ ๊ต์ฒดํ•˜๊ณ , ๊ต์ฒด๋œ ํ† ๋งˆํ† ์˜ ์ขŒํ‘œ์— ํ˜„์žฌ ๋‚ ์งœ์— 1์„ ๋”ํ•œ ๊ฐ’์„ queue์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ ๋„ฃ์–ด ์ค€๋‹ค.

queue์— ์ฒซ ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ ๋„ฃ์–ด์ฃผ๋Š” ์ด์œ ๋Š”

์ฒซ ๋ฒˆ์งธ ๊ฐ’์— ์‹œ๊ฐ„์ด ์ง€๋‚˜ ์ต์€ ํ† ๋งˆํ† ์˜ ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ๋’ค๋กœ ๊ฐˆ์ˆ˜๋ก ์ต์€ ์ง€ ์˜ค๋ž˜๋œ ํ† ๋งˆํ† ๊ฐ€ ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค.

๋ง‰ ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ๋‚˜์ค‘์— ๋น ์งˆ ๊ฒƒ์ด๊ณ , ์ต์€ ์ง€ ์˜ค๋ž˜๋œ ํ† ๋งˆํ† ๊ฐ€ ๋จผ์ € ๋น ์ง€๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

์ดˆ๊ธฐ์— 0์ผ๋กœ ์„ค์ •๋œ ํ† ๋งˆํ† ๊ฐ€ ๋จผ์ € ๋น ์ง€๊ณ  ๊ทธ๋‹ค์Œ 1์ผ ์ฐจ์— ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ๋น ์ง€๋Š” ์‹์ด๋‹ค.

 

๋ชจ๋“  ํ† ๋งˆํ† ๋ฅผ ๋‚ ์งœ ์ˆœ์„œ๋Œ€๋กœ ๋นผ๊ณ  ๋‚˜๋ฉด bfs๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ , ์ตœ์ข…์ ์ธ ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต๋Š” ๋ฐ ๊ฑธ๋ฆฐ ๋‚ ์งœ์ธ currentDay๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ์ •๋‹ต์ด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ํ•œ ๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๋‚ ์งœ๊ฐ€ ์•„๋ฌด๋ฆฌ ์ง€๋‚˜๋„ ํ† ๋งˆํ† ๊ฐ€ ์•ˆ ์ต๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

2์ค‘ for๋ฌธ์œผ๋กœ 3์ฐจ์› ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’๋“ค์„ ๋ชจ๋‘ ํ™•์ธํ•ด ์ฃผ๊ณ , ํ•˜๋‚˜๋ผ๋„ ๋œ ์ต์€ ํ† ๋งˆํ† (0)๊ฐ€ ์žˆ์œผ๋ฉด currentDay๋ฅผ -1๋กœ ๋ฐ”๊ฟ”์„œ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

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

๋น„์Šทํ•œ ๋ฌธ์ œ์€ Gold 5์˜ ํ† ๋งˆํ† (7576๋ฒˆ)๋ฅผ ํ•ด๊ฒฐํ•œ ์‚ฌ๋žŒ์ด๋ฉด ์ž…๋ ฅ๊ณผ ์ด๋™๋งŒ ์ˆ˜์ •ํ•ด ์ฃผ๋ฉด ๊ฝ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ํฌ๊ฒŒ ์–ด๋ ค์› ๋˜ ์ ์€ ์—†์—ˆ๋‹ค.

ํ† ๋งˆํ†  7576๋ฒˆ์„ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์€ 7576๋ฒˆ์„ ๋จผ์ € ํ•ด๊ฒฐํ•˜๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒŒ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค. 7576๋ฒˆ์€ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋งŒ ์“ฐ๊ธฐ์— ๋” ์‰ฝ๋‹ค.

728x90