Daily LeetCode Challenge - 1254. Number of Closed Islands

Min Young Kim·2023년 4월 6일
0

algorithm

목록 보기
113/198

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

0개의 댓글