시배's Android

Algorithm | Kotlin 백준 16918 봄버맨 본문

Algorithm

Algorithm | Kotlin 백준 16918 봄버맨

si8ae 2023. 9. 11. 22:37
 

16918번: 봄버맨

첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다.

www.acmicpc.net

 

private fun main() {
    val (r, c, n) = readLine()!!.split(" ").map { it.toInt() }
    val x = intArrayOf(-1, 0, 0, 1)
    val y = intArrayOf(0, -1, 1, 0)
    val a = Array(r) { readLine()!!.toCharArray() }
    val b = Array(r) { i -> IntArray(c) { if (a[i][it] == 'O') 3 else 0 } }
    val s = StringBuilder()
    for (t in 2..n) {
        if (t % 2 == 0) {
            for (i in 0 until r) {
                for (j in 0 until c) {
                    if (b[i][j] == 0) {
                        b[i][j] = t + 3; a[i][j] = 'O'
                    }
                }
            }
        } else {
            for (i in 0 until r) {
                for (j in 0 until c) {
                    if (b[i][j] == t) {
                        b[i][j] = 0; a[i][j] = '.'
                        repeat(4) {
                            val h = i + x[it];
                            val w = j + y[it]
                            if (h in 0 until r && w in 0 until c && a[h][w] == 'O' && b[h][w] != t) {
                                b[h][w] = 0; a[h][w] = '.'
                            }
                        }
                    }
                }
            }
        }
    }

    repeat(r) { s.append(a[it]).append('\n') }
    print(s)
}