Skip to content

Commit a77afb8

Browse files
committed
word search solutions
1 parent 1813451 commit a77afb8

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

โ€Žword-search/moonjonghoo.jsโ€Ž

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/**
2+
* ๐Ÿ”ข ๋ฌธ์ œ ์ด๋ฆ„: Word Search (LeetCode 79)
3+
* ๐Ÿงฉ ๋ฌธ์ œ ์œ ํ˜•: DFS + Backtracking
4+
*
5+
* ๐ŸŽฏ ๋ฌธ์ œ ์„ค๋ช…:
6+
* ์ฃผ์–ด์ง„ 2์ฐจ์› ๋ฌธ์ž ๊ฒฉ์ž(board)์™€ ๋ฌธ์ž์—ด(word)์—์„œ,
7+
* ๋‹จ์–ด๊ฐ€ board ์•ˆ์—์„œ ์ธ์ ‘ํ•œ ์…€(์ƒํ•˜์ขŒ์šฐ)์„ ํ†ตํ•ด ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋ผ.
8+
* ๊ฐ ์…€์€ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋Œ€๊ฐ์„  ์ด๋™์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
9+
*
10+
* ๐Ÿ’ก ํ•ต์‹ฌ ์•„์ด๋””์–ด:
11+
* - ๋ชจ๋“  ์…€์„ ์‹œ์ž‘์ ์œผ๋กœ ์‚ผ์•„ DFS ํƒ์ƒ‰
12+
* - ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ๋‹ค์Œ ๋ฌธ์ž๋กœ ์žฌ๊ท€ ํ˜ธ์ถœ
13+
* - visited ๋ฐฐ์—ด์„ ํ†ตํ•ด ์ค‘๋ณต ๋ฐฉ๋ฌธ์„ ๋ฐฉ์ง€
14+
* - DFS ์ค‘ ์™„์„ฑ๋œ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฉด true ๋ฐ˜ํ™˜
15+
*
16+
* ๐Ÿ“ˆ ์‹œ๊ฐ„๋ณต์žก๋„: O(N * 3^L)
17+
* - N = ์ „์ฒด ์…€ ์ˆ˜, L = ๋‹จ์–ด ๊ธธ์ด
18+
* - ๊ฐ ์…€๋งˆ๋‹ค ์ตœ๋Œ€ 3 ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ (์ด์ „ ์…€ ์ œ์™ธ)
19+
*
20+
* ๐Ÿ“ฆ ๊ณต๊ฐ„๋ณต์žก๋„: O(L) โ€” DFS ์žฌ๊ท€ ๊นŠ์ด (๋‹จ์–ด ๊ธธ์ด)
21+
*/
22+
23+
function exist(board, word) {
24+
const rows = board.length;
25+
const cols = board[0].length;
26+
27+
// 1. visited ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
28+
const visited = Array.from({ length: rows }, () => Array(cols).fill(false));
29+
30+
// 2. DFS ํ•จ์ˆ˜ ์ •์˜
31+
function dfs(x, y, idx) {
32+
// ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ฐพ์•˜์œผ๋ฉด ์„ฑ๊ณต
33+
if (idx === word.length) return true;
34+
35+
// ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜, ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๊ฑฐ๋‚˜, ๋ฌธ์ž ๋ถˆ์ผ์น˜ โ†’ ์‹คํŒจ
36+
if (
37+
x < 0 ||
38+
x >= rows ||
39+
y < 0 ||
40+
y >= cols ||
41+
visited[x][y] ||
42+
board[x][y] !== word[idx]
43+
)
44+
return false;
45+
46+
// ํ˜„์žฌ ์œ„์น˜ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
47+
visited[x][y] = true;
48+
49+
// ์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ ์ •์˜
50+
const directions = [
51+
[1, 0],
52+
[-1, 0],
53+
[0, 1],
54+
[0, -1],
55+
];
56+
57+
// 3. ๋‹ค์Œ ๋ฌธ์ž ํƒ์ƒ‰
58+
for (let [dx, dy] of directions) {
59+
if (dfs(x + dx, y + dy, idx + 1)) return true;
60+
}
61+
62+
// 4. ๋ฐฑํŠธ๋ž˜ํ‚น (๋ฐฉ๋ฌธ ์ƒํƒœ ๋ณต์›)
63+
visited[x][y] = false;
64+
return false;
65+
}
66+
67+
// 5. ๋ชจ๋“  ์…€์—์„œ DFS ์‹œ์ž‘ ์‹œ๋„
68+
for (let i = 0; i < rows; i++) {
69+
for (let j = 0; j < cols; j++) {
70+
if (board[i][j] === word[0] && dfs(i, j, 0)) {
71+
return true;
72+
}
73+
}
74+
}
75+
76+
return false;
77+
}

0 commit comments

Comments
ย (0)