Algorithm
Algorithm | 백준 Kotlin 7576 토마토
si8ae
2023. 10. 7. 22:32
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토
www.acmicpc.net
import java.util.*
private fun main() {
val r = System.`in`.bufferedReader()
val queue: Queue<Triple<Int, Int, Int>> = LinkedList()
val (n, m) = r.readLine().split(' ').map { it.toInt() }
val arr = Array(m) { IntArray(n) }
for (y in 0 until m) with(StringTokenizer(r.readLine())) {
for (x in 0 until n) {
val num = nextToken().toInt()
if (num == 1) queue += Triple(x, y, 0)
arr[y][x] = num - 1
}
}
val dx = intArrayOf(-1, 1, 0, 0)
val dy = intArrayOf(0, 0, -1, 1)
while (queue.isNotEmpty()) {
val (x, y, t) = queue.poll()
for (i in 0 until 4) {
val nx = x + dx[i]
val ny = y + dy[i]
if (nx !in 0 until n || ny !in 0 until m) continue
if (arr[ny][nx] != -1) continue
arr[ny][nx] = t + 1
queue += Triple(nx, ny, t + 1)
}
}
var t = 0
for (row in arr) {
for (col in row) {
if (col == -1) t = -1
if (t != -1 && col > t) t = col
}
}
println(t)
}