Skip to content

Commit 8fee1b1

Browse files
committed
add Word Search
1 parent 52df6bb commit 8fee1b1

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

word-search/HoonDongKang.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/**
2+
* [Problem]: [79] Word Search
3+
*
4+
* (https://leetcode.com/problems/word-search/description/)
5+
*/
6+
7+
function exist(board: string[][], word: string): boolean {
8+
//시간복잡도 O(m * n * 4^w)
9+
//공간복잡도 O(w)
10+
function dfsChangingBoard(board: string[][], word: string): boolean {
11+
const rows = board.length;
12+
const cols = board[0].length;
13+
14+
for (let i = 0; i < rows; i++) {
15+
for (let j = 0; j < cols; j++) {
16+
if (dfs(i, j, 0)) return true;
17+
}
18+
}
19+
20+
return false;
21+
22+
function dfs(i: number, j: number, k: number): boolean {
23+
if (k === word.length) return true;
24+
25+
if (i < 0 || j < 0) return false;
26+
if (i >= rows || j >= cols) return false;
27+
if (board[i][j] !== word[k]) return false;
28+
29+
const temp = board[i][j];
30+
board[i][j] = "";
31+
32+
const result =
33+
dfs(i + 1, j, k + 1) ||
34+
dfs(i - 1, j, k + 1) ||
35+
dfs(i, j + 1, k + 1) ||
36+
dfs(i, j - 1, k + 1);
37+
38+
board[i][j] = temp;
39+
return result;
40+
}
41+
}
42+
43+
//시간복잡도 O(m * n * 4^w)
44+
//공간복잡도 O(w)
45+
function dfsMaintainingBoard(board: string[][], word: string): boolean {
46+
const rows = board.length;
47+
const cols = board[0].length;
48+
49+
// array보다 Set<string>이 더 효율적
50+
// Set.has: O(1) / Array.includes: O(n)
51+
const passed = new Set<string>();
52+
53+
for (let i = 0; i < rows; i++) {
54+
for (let j = 0; j < cols; j++) {
55+
if (dfs(i, j, 0)) return true;
56+
}
57+
}
58+
59+
return false;
60+
61+
function dfs(i: number, j: number, k: number): boolean {
62+
if (k === word.length) return true;
63+
64+
if (i < 0 || j < 0) return false;
65+
if (i >= rows || j >= cols) return false;
66+
if (board[i][j] !== word[k]) return false;
67+
if (passed.has(`${i},${j}`)) return false;
68+
69+
passed.add(`${i},${j}`);
70+
71+
const result =
72+
dfs(i + 1, j, k + 1) ||
73+
dfs(i - 1, j, k + 1) ||
74+
dfs(i, j + 1, k + 1) ||
75+
dfs(i, j - 1, k + 1);
76+
77+
passed.delete(`${i},${j}`);
78+
return result;
79+
}
80+
}
81+
82+
return dfsMaintainingBoard(board, word);
83+
}

0 commit comments

Comments
 (0)