- Time Complexity: $O(M*N)$
- ๋ชจ๋ ์ฌ์ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ๊ฐ ์ต๋์ด๋ฉฐ, ์ด ๋
grid
์ ํ์ ๊ธธ์ด์ธ M, ์ด์ ๊ธธ์ด์ธ N์ ๊ณฑํ M*N๋งํผ ์ฌ๊ทํธ์ถ์ด ์ผ์ด๋๋ค.
- Space Complexity: $O(M*N)$
- ๋ชจ๋ ์ฌ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด
grid
์ ํ์ ๊ธธ์ด์ธ M, ์ด์ ๊ธธ์ด์ธ N์ ๊ณฑํ M*N ํฌ๊ธฐ์ visited
๋ฐฐ์ด์ ์ ์ธํ๋ค.
var offsets = [][]int{
{1, 0},
{-1, 0},
{0, 1},
{0, -1},
}
func update(i int, j int, grid [][]byte, visited [][]bool) {
visited[i][j] = true
for _, offset := range offsets {
ni, nj := i+offset[0], j+offset[1]
if ni < 0 || ni >= len(grid) || nj < 0 || nj >= len(grid[0]) || visited[ni][nj] || grid[ni][nj] == '0' {
continue
}
update(ni, nj, grid, visited)
}
}
func numIslands(grid [][]byte) int {
visited := make([][]bool, len(grid))
for i, _ := range visited {
visited[i] = make([]bool, len(grid[0]))
}
var cnt int
for i, row := range grid {
for j, val := range row {
if val == '0' || visited[i][j] {
continue
}
update(i, j, grid, visited)
cnt++
}
}
return cnt
}