Skip to content

Commit 88796e9

Browse files
committed
feat: word-break solution
1 parent ee2c434 commit 88796e9

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

โ€Žword-break/YeomChaeeun.tsโ€Ž

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* ์ฃผ์–ด์ง„ ๋‹จ์–ด๊ฐ€ wordDict์— ์žˆ๋Š” ๋‹จ์–ด๋“ค๋กœ ๋ถ„ํ•  ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ
3+
* ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„
4+
* - ์‹œ๊ฐ„ ๋ณต์žก๋„: O(nmk) => ๋ฌธ์ž์—ด s์˜ ๊ธธ์ด * wordDict ๋‹จ์–ด ๊ฐœ์ˆ˜ * wordDict ๋‚ด ๊ฐ€์žฅ ๊ธด ๋‹จ์–ด์˜ ๊ธธ์ด
5+
* - ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
6+
* @param s
7+
* @param wordDict
8+
*/
9+
function wordBreak(s: string, wordDict: string[]): boolean {
10+
// ์ ‘๊ทผ 1 - ๋‹จ์–ด ํฌํ•จ ์—ฌ๋ถ€๋งŒ ๊ณ ๋ คํ•˜๊ณ  ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉ๋  ์žˆ๊ณ  ์—ฐ์†์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š์•˜์Œ
11+
// let len = 0;
12+
// for(const word of wordDict) {
13+
// len += word.length
14+
// if(!s.includes(word)) return false
15+
// }
16+
// if(s.length < len) return false
17+
// return true
18+
19+
/* ํ•ด๋‹น ์ผ€์ด์Šค์—์„œ ์—๋Ÿฌ ๋ฐœ์ƒํ•จ
20+
* - ๋‹จ์–ด๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
21+
* s="bb"
22+
* wordDict = ["a","b","bbb","bbbb"]
23+
*/
24+
25+
// ์ ‘๊ทผ 2- dp ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉ
26+
// ๊ฐ ์œ„์น˜๊นŒ์ง€์˜ ๋ฌธ์ž์—ด์ด ๋ถ„ํ•  ๊ฐ€๋Šฅํ•œ์ง€ ์ €์žฅํ•จ
27+
let dp: boolean[] = new Array(s.length).fill(false)
28+
29+
for (let i = 0; i < s.length; i++) {
30+
for (let word of wordDict) {
31+
// ์กฐ๊ฑด ์ฒ˜๋ฆฌ - ํ˜„์žฌ ์œ„์น˜๊ฐ€ ๋‹จ์–ด ๊ธธ์ด๋ณด๋‹ค ์ž‘์œผ๋ฉด ์Šคํ‚ตํ•จ
32+
if (i < word.length - 1) {
33+
continue
34+
}
35+
// ํ˜„์žฌ ์œ„์น˜์˜ ์œ ํšจ์„ฑ ์ฒดํฌ - ์ฒซ๋ฒˆ์งธ ๋‹จ์–ด์ด๊ฑฐ๋‚˜ ์ด์ „ ์œ„์น˜๊นŒ์ง€ ๋ถ„ํ•  ๊ฐ€๋Šฅํ•œ์ง€
36+
if (i == word.length - 1 || dp[i - word.length]) {
37+
// ํ˜„์žฌ ์œ„์น˜์˜ ๋‹จ์–ด ๋งค์นญ ์ฒดํฌ
38+
if (s.substring(i - word.length + 1, i + 1) == word) {
39+
dp[i] = true
40+
break
41+
}
42+
}
43+
}
44+
}
45+
return dp[s.length - 1]
46+
}

0 commit comments

Comments
ย (0)