[백준] 7569번: 토마토 - kotlin

kldaji·2021년 11월 8일
0

백준문제풀이

목록 보기
32/35
post-custom-banner

문제

https://www.acmicpc.net/problem/7569

풀이

  • 7576번 토마토 문제에서 z 축이 추가된 문제
  • 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향이 존재
  • 그 외의 풀이 방법은 위의 토마토 문제와 동일!
import java.util.*
import kotlin.math.max

fun getResult2(tomatoes: Array<MutableList<MutableList<Int>>>, m: Int, n: Int, h: Int): Int {
    var result = 0
    for (i in 0 until h) {
        for (j in 0 until n) {
            for (k in 0 until m) {
                if (tomatoes[i][j][k] == 0) {
                    return -1
                }
                result = max(result, tomatoes[i][j][k])
            }
        }
    }
    return result - 1
}

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()
    val (m, n, h) = br.readLine().split(" ").map { it.toInt() }

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

    val tomatoes = Array(h) { mutableListOf<MutableList<Int>>() }
    repeat(h) { z ->
        repeat(n) {
            tomatoes[z].add(br.readLine().split(" ").map { it.toInt() }.toMutableList())
        }
    }
    val queue: Queue<Triple<Int, Int, Int>> = LinkedList()
    for (i in 0 until h) {
        for (j in 0 until n) {
            for (k in 0 until m) {
                if (tomatoes[i][j][k] == 1) {
                    queue.add(Triple(i, j, k))
                }
            }
        }
    }
    while (queue.isNotEmpty()) {
        val (z, y, x) = queue.poll()
        for (i in 0 until 6) {
            val nx = dx[i] + x
            val ny = dy[i] + y
            val nz = dz[i] + z
            if (nz in 0 until h && ny in 0 until n && nx in 0 until m && tomatoes[nz][ny][nx] == 0) {
                tomatoes[nz][ny][nx] = tomatoes[z][y][x] + 1
                queue.add(Triple(nz, ny, nx))
            }
        }
    }
    bw.write("${getResult2(tomatoes, m, n, h)}")
    br.close()
    bw.close()
}

더 좋은 방법 있으면 댓글 달아주세요!!!

profile
다양한 관점에서 다양한 방법으로 문제 해결을 지향하는 안드로이드 개발자 입니다.
post-custom-banner

0개의 댓글