Skip to content

Commit fcf21f7

Browse files
committed
perf: Apply memoization to optimize performance #271
- ๊ธฐ์กด ์žฌ๊ท€ + ํŠธ๋ผ์ด ๋ฐฉ์‹์—์„œ ๋ฐœ์ƒํ•˜๋˜ TLE ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์˜€์Œ - `canBreak(start_index)` ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ `memo` ๋”•์…”๋„ˆ๋ฆฌ์— ์บ์‹ฑํ•˜์—ฌ ๋™์ผํ•œ `start_index`์— ๋Œ€ํ•œ ์ค‘๋ณต ๊ณ„์‚ฐ ๋ฐฉ์ง€
1 parent 188ef5f commit fcf21f7

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

โ€Žword-break/river20s.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,19 @@ def wordBreak(self, s: str, wordDict: List[str]) -> bool:
2929

3030
n = len(s) # ๋ฌธ์ž์—ด s์˜ ๊ธธ์ด, ๋‚˜์ค‘์— ์ธ๋ฑ์Šค ๋๊นŒ์ง€ ๋„๋‹ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•จ
3131

32+
# <<<--- ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ์บ์‹œ ์ดˆ๊ธฐํ™” ---<<<
33+
# key: start_index, value: s[start_index:] ๋ถ„ํ•  ๊ฐ€๋Šฅ ์—ฌ๋ถ€ (True/False)
34+
memo = {}
35+
3236
# 2. ์žฌ๊ท€ ํ•จ์ˆ˜ ์ •์˜
3337
# canBreak(start_index): s[strat_index:] ๋ถ€๋ถ„์„ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ
3438
def canBreak(start_index: int) -> bool:
3539

40+
# <<<--- ์บ์‹œ ํ™•์ธ ---<<<
41+
# ์ด start_index์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ด๋ฏธ memo์— ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ๋ฐ˜ํ™˜
42+
if start_index in memo:
43+
return memo[start_index]
44+
3645
# ๋ฒ ์ด์Šค ์ผ€์ด์Šค
3746
# ์‹œ์ž‘ ์ธ๋ฑ์Šค(start_index)๊ฐ€ ๋ฌธ์ž์—ด ๋์— ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด ์„ฑ๊ณต
3847
if start_index == n:
@@ -41,7 +50,6 @@ def canBreak(start_index: int) -> bool:
4150
# ํ˜„์žฌ start_index๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋‹จ์–ด๋ฅผ ํŠธ๋ผ์ด๋ฅผ ์ด์šฉํ•ด ์ฐพ๊ณ 
4251
# ๊ฐ ๋‹จ์–ด์— ๋Œ€ํ•ด ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ด ๋ถ„ํ•  ๊ฐ€๋Šฅํ•œ์ง€ ์žฌ๊ท€์ ์œผ๋กœ ํ™•์ธ
4352
currentNode = trie.root
44-
4553
for i in range(start_index, n):
4654
char = s[i]
4755

@@ -57,9 +65,13 @@ def canBreak(start_index: int) -> bool:
5765
# ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„ s[i+1:]์— ๋Œ€ํ•ด์„œ๋„ ๋ถ„ํ•  ๊ฐ€๋Šฅํ•œ์ง€ ์žฌ๊ท€ ํ˜ธ์ถœ
5866
if canBreak(i + 1):
5967
# ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„ ๋ถ„ํ•  ์„ฑ๊ณต => ์ „์ฒด ๋ถ„ํ•  ๊ฐ€๋Šฅ
68+
# <<<--- ์„ฑ๊ณต ๊ฒฐ๊ณผ ์บ์‹œ์— ์ €์žฅ ---<<<
69+
memo[start_index] = True
6070
return True
6171
# start_index๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๋‹จ์–ด ๋ถ„ํ• ์„ ์‹œ๋„ํ–ˆ์œผ๋‚˜
6272
# ์„ฑ๊ณต์ ์ธ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด
73+
# <<<--- ์‹คํŒจ ๊ฒฐ๊ณผ ์บ์‹œ์— ์ €์žฅ ---<<<
74+
memo[start_index] = False
6375
return False
6476

6577
# 3. ์žฌ๊ท€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ์ž‘

0 commit comments

Comments
ย (0)