원본 문제 : https://www.acmicpc.net/problem/2178
문제 참고 : https://zoonvivor.tistory.com/77
<첫번째>
import java.io.*
import java.util.*
var arr: Array<IntArray> = arrayOf()
var visited: Array<BooleanArray> = arrayOf()
var dx: IntArray = intArrayOf(-1,0,1,0)
var dy: IntArray = intArrayOf(0,-1,0,1)
var N: Int = 0
var M: Int = 0
data class Dot(var x: Int, var y: Int)
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val input = readLine().split(" ")
N = input[0].toInt()
M = input[1].toInt()
arr = Array(N) { IntArray(M) }
visited = Array(N) { BooleanArray(M) }
for ( i in 0 until N ) {
val str = readLine()
for ( j in 0 until M ) {
arr[i][j] = (str[j]+"").toInt()
visited[i][j] = false
}
}
visited[0][0] = true
bfs(0, 0)
println(arr[N-1][M-1])
}
fun bfs(x: Int, y: Int) {
val queue: Queue<Dot> = LinkedList<Dot>()
queue.add(Dot(x, y))
while ( !queue.isEmpty() ) {
val d: Dot = queue.poll()
for ( i in 0 until 4 ) {
val nX = d.x + dx[i]
val nY = d.y + dy[i]
if ( nX < 0 || nY < 0 || nX >= N || nY >= M )
continue
if ( visited[nX][nY] || arr[nX][nY] == 0 )
continue
queue.add(Dot(nX, nY))
arr[nX][nY] = arr[d.x][d.y] + 1
visited[nX][nY] = true
}
}
}
<두번째> 2020/06/09
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
var matrix: Array<IntArray> = arrayOf()
var visited: Array<BooleanArray> = arrayOf()
var nm: List<Int> = listOf()
data class Dot(val x: Int, val y: Int)
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
nm = readLine().split(" ").map { it.toInt() }
matrix = Array(nm[0]) { IntArray(nm[1]) }
.map { readLine().map{ it.toInt() - 48 }.toIntArray()
}.toTypedArray()
visited = Array(nm[0]) { BooleanArray(nm[1]) { false } }
visited[0][0] = true
bfs(0, 0)
println(matrix[nm[0] - 1][nm[1] - 1])
}
fun bfs(x: Int, y: Int) {
val dx = intArrayOf(1,-1,0,0)
val dy = intArrayOf(0,0,-1,1)
val list: LinkedList<Dot> = LinkedList()
list.add(Dot(x, y))
while (list.isNotEmpty()) {
val now = list.poll()
for (i in 0 until 4) {
val nx = now.x + dx[i]
val ny = now.y + dy[i]
if (nx !in 0 until nm[0] || ny !in 0 until nm[1]) continue
if (matrix[nx][ny] == 0 || visited[nx][ny]) continue
list.add(Dot(nx, ny))
matrix[nx][ny] = matrix[now.x][now.y] + 1
visited[nx][ny] = true
}
}
}
'코딩연습' 카테고리의 다른 글
[백준] 플로이드 (11404)(Kotlin) (0) | 2020.01.30 |
---|---|
[백준] 숨바꼭질 (1697)(Kotlin) (0) | 2020.01.29 |
[백준] 토마토 (7576)(Kotlin) (0) | 2020.01.29 |
[백준] DFS와 BFS (1260)(Kotlin) (0) | 2020.01.29 |
[백준] 체스판 다시 칠하기(1018)(Kotlin) (0) | 2020.01.22 |
댓글