원본 문제 : 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
}
'코딩연습' 카테고리의 다른 글
[백준] 플로이드 (11404)(Kotlin) (0) | 2020.01.30 |
---|---|
[백준] 숨바꼭질 (1697)(Kotlin) (0) | 2020.01.29 |
[백준] DFS와 BFS (1260)(Kotlin) (0) | 2020.01.29 |
[백준] 미로 탐색(2178)(Kotlin) (0) | 2020.01.22 |
[백준] 체스판 다시 칠하기(1018)(Kotlin) (0) | 2020.01.22 |
댓글