본문 바로가기
코딩연습

[백준] 토마토 (7576)(Kotlin)

by 유줘니 2020. 1. 29.

원본 문제 : https://www.acmicpc.net/problem/7576

문제 참고 : https://zoonvivor.tistory.com/131

 

<첫번째>

import java.io.*
import java.util.*

data class Dot(var x: Int, var y: Int)

var N: Int = 0
var M: Int = 0

val dx: IntArray = intArrayOf(-1,1,0,0)
val dy: IntArray = intArrayOf(0,0,-1,1)

var map: Array<IntArray> = arrayOf()

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {

    val nm = readLine().split(" ")
    M = nm[0].toInt()
    N = nm[1].toInt()

    map = Array(N) { IntArray(M) }

    for ( i in 0 until N ){
        val str = readLine().split(" ")
        for ( j in 0 until M ){
            map[i][j] = str[j].toInt()
        }
    }


    println(bfs())
}

fun bfs(): Int {

    val queue: Queue<Dot> = LinkedList<Dot>()

    for ( i in 0 until N ){
        for ( j in 0 until M ){
            if (map[i][j] == 1)
                queue.add(Dot(i,j))
        }
    }

    while ( !queue.isEmpty() ) {

        val dq = queue.poll()

        for ( i in 0 until 4 ) {
            val nx = dq.x + dx[i]
            val ny = dq.y + dy[i]

            if ( nx < 0 || ny < 0 || nx >= N || ny >= M )
                continue

            if ( map[nx][ny] != 0 )
                continue

            queue.add(Dot(nx, ny))
            map[nx][ny] = map[dq.x][dq.y] + 1

        }
    }

    var max = 0

    for ( i in 0 until N ){
        for ( j in 0 until M ){
            if (map[i][j] == 0) {
                return -1
            }
            max = Math.max(max, map[i][j])
        }
    }

    return max - 1

}

댓글