[leetcode 200] Number of Islands
200. Number of Islands
해결 과정
1
을 만나면, 섬 개수를 ++을 하고 dfs (깊이우선탐색)
한다.
왼쪽/오른쪽/아래/위 샅샅이 탐색하고, 범위를 벗어나거나 1
이 아닌 경우 등 island('1')
가 아닌 경우에 dfs 함수 탈출.
탐색한 위치는 ‘0’ 로 바꿔준다. (이미 탐색 완료되어 섬으로 인정된 땅.)
코드
fun numIslands(grid: Array<CharArray>): Int {
var count = 0
grid.forEachIndexed { xIdx, row ->
row.forEachIndexed { yIdx, item ->
if(grid[xIdx][yIdx] == '1') {
++count
dfs(grid, xIdx, yIdx)
}
}
}
return count
}
private fun dfs(grid: Array<CharArray>, xIdx: Int, yIdx: Int) {
if (xIdx < 0 || xIdx >= grid.size || yIdx < 0 || yIdx >= grid[0].size || grid[xIdx][yIdx] != '1')
return
grid[xIdx][yIdx] = '0'
dfs(grid, xIdx-1, yIdx)
dfs(grid, xIdx+1, yIdx)
dfs(grid, xIdx, yIdx-1)
dfs(grid, xIdx, yIdx+1)
}
배운 점
탐색을 할 때, grid[xIdx][yIdx] = '0'
와 같이 마킹 하여 재탐색하지 않도록 한다.
Leave a comment