Skip to content

Latest commit

ย 

History

History
46 lines (41 loc) ยท 1.1 KB

invidam.go.md

File metadata and controls

46 lines (41 loc) ยท 1.1 KB

Complexity

  • Time Complexity: $O(M*N)$
    • ๋ชจ๋“  ์„ฌ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ตœ๋Œ€์ด๋ฉฐ, ์ด ๋•Œ grid์˜ ํ–‰์˜ ๊ธธ์ด์ธ M, ์—ด์˜ ๊ธธ์ด์ธ N์„ ๊ณฑํ•œ M*N๋งŒํผ ์žฌ๊ท€ํ˜ธ์ถœ์ด ์ผ์–ด๋‚œ๋‹ค.
  • Space Complexity: $O(M*N)$
    • ๋ชจ๋“  ์„ฌ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด grid์˜ ํ–‰์˜ ๊ธธ์ด์ธ M, ์—ด์˜ ๊ธธ์ด์ธ N์„ ๊ณฑํ•œ M*N ํฌ๊ธฐ์˜ visited ๋ฐฐ์—ด์„ ์„ ์–ธํ–ˆ๋‹ค.

Code

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
}