|
| 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