Skip to content

Commit 61b775a

Browse files
committed
word-search solutions
1 parent c218f76 commit 61b775a

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

โ€Žword-search/Blossssom.tsโ€Ž

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/**
2+
* @param board - m * n ๋ฌธ์ž ๊ทธ๋ฆฌ๋“œ
3+
* @param word - ์ฐพ์„ ๋‹จ์–ด
4+
* @returns - ๊ทธ๋ฆฌ๋“œ ๋‚ด ์ธ์ ‘ํ•œ ์…€์˜ ๊ธ€์ž๋กœ word๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฐ˜ํ™˜
5+
* @description
6+
* - ๋™์ผํ•œ ์…€ ๊ธ€์ž๋Š” ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ
7+
* - visit ์ฒดํฌ ๋ถ€๋ถ„์—์„œ ์กฐ๊ธˆ ์ƒ๊ฐ์„ ์ž˜๋ชปํ•ด ์˜ค๋ž˜๊ฑธ๋ฆผ
8+
* - dfs ์—ฐ์Šต ํ•„์š”, ๋ฌธ์ œ๋ฅผ ์ตœ๋Œ€ํ•œ ์ž˜๊ฒŒ ์ž˜๋ผ์„œ ์ƒ๊ฐํ•ด๋ณด๊ธฐ
9+
*/
10+
11+
function exist(board: string[][], word: string): boolean {
12+
const maximumRow = board.length - 1;
13+
const maximumCol = board[0].length - 1;
14+
// ์‹œ์ž‘์ง€์  ์ฐพ๊ธฐ
15+
const starter = board.reduce<number[][]>((acc, row, rIndex) => {
16+
row.forEach((col, cIndex) => {
17+
if (col === word[0]) {
18+
acc.push([rIndex, cIndex]);
19+
}
20+
});
21+
return acc;
22+
}, []);
23+
24+
function recursive(row: number, col: number, target: number): boolean {
25+
// word์˜ ๊ธธ์ด๊นŒ์ง€ ์™”๋‹ค๋ฉด ์ด์ „ ์กฐ๊ฑด์€ ํ†ต๊ณผ ์ฆ‰, word์™€ ๋™์ผ ๋ฌธ์ž์—ด
26+
if (target === word.length) {
27+
return true;
28+
}
29+
30+
// ์ธ์ ‘ index ๋ฒ”์œ„ ์ฒดํฌ ๋ฐ ๊ฐ’ ์ฒดํฌ
31+
if (
32+
row < 0 ||
33+
row > maximumRow ||
34+
col < 0 ||
35+
col > maximumCol ||
36+
board[row][col] !== word[target]
37+
) {
38+
return false;
39+
}
40+
// ์ด์ „ ๊ฐ’์„ ๋™์ผ ์ฒดํฌํ•˜์ง€ ์•Š๋„๋ก ๊ฐ’์„ ์ €์žฅ ๋ฐ ๋ณ€๊ฒฝ
41+
const saveValue = board[row][col];
42+
// ์ฐก๊ธ‹
43+
board[row][col] = ">_o";
44+
45+
const finding =
46+
recursive(row + 1, col, target + 1) ||
47+
recursive(row - 1, col, target + 1) ||
48+
recursive(row, col + 1, target + 1) ||
49+
recursive(row, col - 1, target + 1);
50+
51+
// ๋‹ค์Œ ์ˆœํšŒ ๋ฐ ์ฒดํฌ๋ฅผ ์œ„ํ•œ ์›์ƒ๋ณต๊ตฌ
52+
board[row][col] = saveValue;
53+
return finding;
54+
}
55+
56+
for (const start of starter) {
57+
const isFind = recursive(start[0], start[1], 0);
58+
if (isFind) {
59+
return true;
60+
}
61+
}
62+
return false;
63+
}
64+
65+
const board = [
66+
["A", "B", "C", "E"],
67+
["S", "F", "C", "S"],
68+
["A", "D", "E", "E"],
69+
];
70+
71+
const word = "ABCCED";
72+
console.log(exist(board, word));
73+

0 commit comments

Comments
ย (0)