Problem From.
https://leetcode.com/problems/number-of-enclaves/
오늘 문제는 0이 물 1 이 육지인 이차원 배열이 주어질때, 1로 둘러쌓인 0의 칸이 몇칸인지 구하는 문제였다.
이 문제는 DFS 로 풀 수 있었는데, 각 모서리에서 1인 칸을 시작으로 dfs 로 탐색하며 0으로 바꿔나간다.
그리고 마지막에 남아있는 1의 갯수를 세면 육지의 칸 갯수를 구할 수 있었다.
class Solution {
fun numEnclaves(grid: Array<IntArray>): Int {
var answer = 0
for(i in 0 until grid.size) {
for(j in 0 until grid[0].size) {
if(i == 0 || j == 0 || i == grid.size - 1 || j == grid[0].size - 1) {
dfs(grid, i, j)
}
}
}
for(i in 0 until grid.size) {
for(j in 0 until grid[0].size) {
answer += grid[i][j]
}
}
return answer
}
private val direction = arrayOf(
intArrayOf(1, 0),
intArrayOf(-1, 0),
intArrayOf(0, -1),
intArrayOf(0, 1)
)
private fun dfs(grid: Array<IntArray>, x: Int, y: Int) {
if(x < 0 || y < 0 || x >= grid.size || y >= grid[0].size) return
if(grid[x][y] == 0) return
grid[x][y] = 0
for(direc in direction) {
dfs(grid, x + direc[0], y + direc[1])
}
}
}