Problem From.
https://leetcode.com/problems/number-of-closed-islands/
오늘 문제는 바다와 육지 배열이 주어졌을때, 섬이 몇개 있는지 구하는 문제였다.
이 문제는 DFS 를 이용하여 풀었는데 섬이 되기 위한 조건은 모두 1로 둘러쌓여 있어야하는데, 육지의 값이 맨 끝에 있거나, 육지를 따라서 가다가 끝이 나오면 false 를 리턴하는 식으로 풀었다.
class Solution {
fun closedIsland(grid: Array<IntArray>): Int {
var answer = 0
for(i in 0 until grid.size) {
for(j in 0 until grid[0].size) {
if(grid[i][j] == 0 && dfs(grid, i, j)) {
answer += 1
}
}
}
return answer
}
private val direction = arrayOf(
intArrayOf(1, 0),
intArrayOf(0, 1),
intArrayOf(-1, 0),
intArrayOf(0, -1)
)
private fun dfs(grid: Array<IntArray>, x: Int, y: Int) : Boolean {
return if(x < 0 || y < 0 || x >= grid.size || y >= grid[0].size) false
else if(grid[x][y] == 1) true
else {
grid[x][y] = 1
var result = true
for(direc in direction) {
result = result.and(dfs(grid, x + direc[0], y + direc[1]))
}
return result
}
}
}