Skip to content

Commit 4f193b4

Browse files
committed
add Number of Islands solution
1 parent c8c087a commit 4f193b4

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

number-of-islands/HoonDongKang.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/**
2+
* [Problem]: [200] Number of Islands
3+
* (https://leetcode.com/problems/number-of-islands/description/)
4+
*/
5+
function numIslands(grid: string[][]): number {
6+
//시간복잡도 O(n)
7+
//공간복잡도 O(n)
8+
function dfsFunc(grid: string[][]): number {
9+
let rows = grid.length;
10+
let cols = grid[0].length;
11+
let count = 0;
12+
13+
for (let i = 0; i < rows; i++) {
14+
for (let j = 0; j < cols; j++) {
15+
if (grid[i][j] === "1") {
16+
count++;
17+
traveling(i, j);
18+
}
19+
}
20+
}
21+
22+
function traveling(i: number, j: number) {
23+
grid[i][j] = "#";
24+
25+
[
26+
[i - 1, j],
27+
[i + 1, j],
28+
[i, j - 1],
29+
[i, j + 1],
30+
].forEach(([r, c]) => {
31+
if (0 <= r && r < rows && 0 <= c && c < cols) {
32+
if (grid[r][c] === "1") traveling(r, c);
33+
}
34+
});
35+
}
36+
37+
return count;
38+
}
39+
40+
//시간복잡도 O(n)
41+
//공간복잡도 O(n)
42+
function stackFunc(grid: string[][]): number {
43+
let rows = grid.length;
44+
let cols = grid[0].length;
45+
let count = 0;
46+
47+
for (let i = 0; i < rows; i++) {
48+
for (let j = 0; j < cols; j++) {
49+
if (grid[i][j] === "1") {
50+
count++;
51+
traveling(i, j);
52+
}
53+
}
54+
}
55+
56+
function traveling(i: number, j: number) {
57+
let stack = [[i, j]];
58+
59+
while (stack.length) {
60+
let [r, c] = stack.pop()!;
61+
grid[r][c] = "#";
62+
63+
[
64+
[r - 1, c],
65+
[r + 1, c],
66+
[r, c - 1],
67+
[r, c + 1],
68+
].forEach(([r, c]) => {
69+
if (0 <= r && r < rows && 0 <= c && c < cols) {
70+
if (grid[r][c] === "1") stack.push([r, c]);
71+
}
72+
});
73+
}
74+
}
75+
76+
return count;
77+
}
78+
79+
return stackFunc(grid);
80+
}

0 commit comments

Comments
 (0)