|
| 1 | +''' |
| 2 | +์ฃผ์ด์ง ๋ฌธ์์ด s๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๋จ์ด ์ํ์ค๋ก ๋ถํ ํ ์ ์๋์ง ํ์ธํ๋ ๋ฌธ์ ์ |
| 3 | +์ด๋ ๋ชจ๋ ๋จ์ด๋ ์ฃผ์ด์ง ์ฌ์ (wordDict)์ ํฌํจ๋์ด์ผ ํจ |
| 4 | +
|
| 5 | +Example 1.์ ์๋ฅผ ๋ค๋ฉด |
| 6 | + dp = [True, False, False, False, False, False, False, False, False] |
| 7 | +์ธ๋ฑ์ค: 0 1 2 3 4 5 6 7 8 |
| 8 | +์๋ฏธ: "" "l" "le" "lee" "leet" "leetc" "leetco" "leetcod" "leetcode" |
| 9 | +๊ฐ๋ฅํ ๋จ์ด ๊ธธ์ด: l=1~4 l=1~4 l=1~4 l=4 l=1~4 l=1~4 l=1~4 l=4 |
| 10 | +
|
| 11 | +dp[i]๊ฐ True๊ฐ ๋๋ ์กฐ๊ฑด: |
| 12 | +dp[i-l]์ด True์ด๊ณ , s[i-l:i]๊ฐ ์ฌ์ ์ ์๋ ๋จ์ด์ผ ๋ |
| 13 | +์์์์ i=4์ i=8์์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ด True๋ก ๋ณ๊ฒฝ๋จ |
| 14 | +
|
| 15 | +''' |
| 16 | + |
| 17 | +class Solution: |
| 18 | + def wordBreak(self, s: str, wordDict: List[str]) -> bool: |
| 19 | + word_set = set(wordDict) # ๋จ์ด ๊ฒ์์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ์งํฉ์ผ๋ก ๋ณํ |
| 20 | + if not word_set: # ์ฌ์ ์ด ๋น์ด์์ผ๋ฉด ํญ์ False |
| 21 | + return False |
| 22 | + |
| 23 | + max_len = max(len(word) for word in word_set) # ์ฌ์ ์์ ๊ฐ์ฅ ๊ธด ๋จ์ด์ ๊ธธ์ด ๊ตฌ๋ถ |
| 24 | + dp = [False] * (len(s) + 1) # dp[i]๋ ๋ฌธ์์ด s์ ์ฒซ i๊ธ์๊ฐ ๋ถํ ๊ฐ๋ฅํ์ง ์ฌ๋ถ๋ฅผ ์ ์ฅ |
| 25 | + dp[0] = True # ๋น ๋ฌธ์์ด์ ํญ์ ๋ถํ ๊ฐ๋ฅํ๋ฏ๋ก True |
| 26 | + |
| 27 | + for i in range(1, len(s) + 1): # ๋ฌธ์์ด์ ๋ชจ๋ ์์น๋ฅผ ์ํํจ |
| 28 | + for l in range(1, max_len + 1): # ๋จ์ด ๊ธธ์ด๋ฅผ 1๋ถํฐ max_len๊น์ง ํ์ธํจ |
| 29 | + if i < l: # ํ์ฌ ์์น๋ณด๋ค ๋จ์ด ๊ธธ์ด๊ฐ ๊ธธ๋ฉด ํจ์ค |
| 30 | + break |
| 31 | + if dp[i - l] and s[i-l:i] in word_set: # ์ด์ ์์น๊ฐ True์ด๊ณ , ํ์ฌ ๋ถ๋ถ ๋ฌธ์์ด์ด ์ฌ์ ์ ์์ผ๋ฉด True๋ก ํ์ํจ |
| 32 | + dp[i] = True |
| 33 | + break # ํ๋๋ผ๋ ์ฑ๊ณตํ๋ฉด ๋ ํ์ธํ ํ์ ์์ |
| 34 | + |
| 35 | + return dp[-1] # ์ต์ข
๊ฒฐ๊ณผ ๋ฐํ |
0 commit comments