Skip to content

Commit 56276d2

Browse files
committed
add: solve #258 Number of Islands with ts
1 parent af1504f commit 56276d2

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

number-of-islands/Yjason-K.ts

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/**
2+
* 2차원 배열을 돌며 상하좌우로 이동할 수 연속하여 이동할 수 있는 공간(섬) 찾기
3+
* @param {sting[][]} grid - 2차원 배열
4+
* @returns {number} 만들 수 있는 공간(섬)의 갯수
5+
*
6+
* 시간 복잡도: O(n * m)
7+
* m == grid.length
8+
* n == grid[i].length
9+
*
10+
* 공간 복잡도: O(n * m)
11+
* m == grid.length
12+
* n == grid[i].length
13+
*/
14+
function numIslands(grid: string[][]): number {
15+
// 방문 배열 생성
16+
const visited: boolean[][] = Array.from(
17+
{ length: grid.length },
18+
() => Array(grid[0].length).fill(false)
19+
);
20+
21+
let islands = 0;
22+
23+
const bfs = (i: number, j: number): void => {
24+
// 방문 처리
25+
visited[i][j] = true;
26+
27+
// 상, 하, 좌, 우
28+
const directions: [number, number][] = [
29+
[-1, 0],
30+
[1, 0],
31+
[0, -1],
32+
[0, 1],
33+
];
34+
35+
for (const direction of directions) {
36+
const nextI = i + direction[0];
37+
const nextJ = j + direction[1];
38+
if (
39+
nextI >= 0 &&
40+
nextI < grid.length &&
41+
nextJ >= 0 &&
42+
nextJ < grid[0].length &&
43+
!visited[nextI][nextJ] &&
44+
grid[nextI][nextJ] === '1'
45+
) {
46+
bfs(nextI, nextJ);
47+
}
48+
}
49+
};
50+
51+
for (let i = 0; i < grid.length; i++) {
52+
for (let j = 0; j < grid[0].length; j++) {
53+
if (grid[i][j] === '1' && !visited[i][j]) {
54+
// 새로운 섬 발견
55+
islands++;
56+
57+
// BFS 실행
58+
bfs(i, j);
59+
}
60+
}
61+
}
62+
63+
return islands;
64+
}
65+

0 commit comments

Comments
 (0)