Skip to content

Commit b4b027f

Browse files
committed
solve(w07): 200. Number of Islands
1 parent 8244215 commit b4b027f

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

number-of-islands/seungriyou.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# https://leetcode.com/problems/number-of-islands/
2+
3+
from typing import List
4+
5+
class Solution:
6+
def numIslands_bfs(self, grid: List[List[str]]) -> int:
7+
"""
8+
[Complexity]
9+
- TC: O(m * n)
10+
- SC: O(m * n)
11+
12+
[Approach]
13+
BFS를 사용한다.
14+
"""
15+
from collections import deque
16+
17+
dr, dc = [-1, 1, 0, 0], [0, 0, -1, 1]
18+
m, n = len(grid), len(grid[0])
19+
res = 0
20+
21+
def bfs(r, c):
22+
q = deque([(r, c)])
23+
grid[r][c] = "0"
24+
25+
while q:
26+
r, c = q.popleft()
27+
28+
for i in range(4):
29+
nr, nc = r + dr[i], c + dc[i]
30+
# nr, nc가 (1) 범위 내이면서 (2) 아직 방문하지 않은 곳이라면
31+
if 0 <= nr < m and 0 <= nc < n and grid[nr][nc] == "1":
32+
q.append((nr, nc))
33+
grid[nr][nc] = "0"
34+
35+
for r in range(m):
36+
for c in range(n):
37+
if grid[r][c] == "1":
38+
bfs(r, c)
39+
res += 1
40+
41+
return res
42+
43+
def numIslands(self, grid: List[List[str]]) -> int:
44+
"""
45+
[Complexity]
46+
- TC: O(m * n)
47+
- SC: O(m * n) (call stack)
48+
49+
[Approach]
50+
DFS를 사용한다.
51+
"""
52+
dr, dc = [-1, 1, 0, 0], [0, 0, -1, 1]
53+
m, n = len(grid), len(grid[0])
54+
res = 0
55+
56+
def dfs(r, c):
57+
# base condition
58+
if not (0 <= r < m and 0 <= c < n) or grid[r][c] == "0":
59+
return
60+
61+
# visited 처리
62+
grid[r][c] = "0"
63+
64+
# recur
65+
dfs(r - 1, c)
66+
dfs(r + 1, c)
67+
dfs(r, c - 1)
68+
dfs(r, c + 1)
69+
70+
for r in range(m):
71+
for c in range(n):
72+
if grid[r][c] == "1":
73+
dfs(r, c)
74+
res += 1
75+
76+
return res

0 commit comments

Comments
 (0)