Daily LeetCode Challenge - 1020. Number of Enclaves

Min Young Kim·2023년 4월 7일
0

algorithm

목록 보기
114/198

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])
        }
        
    }
    
    
}
profile
길을 찾는 개발자

0개의 댓글