|
์ฝ๋ ์์ฑํ๊ธฐ
def solution(strs, t):
answer = 0
n=len(t)
dp=[float('inf')]*(n+1)
dp[0]=0
for i in range(1, n+1):
for k in range(1, 6):
if i<k : start = 0
else : start=i-k
if t[start:i] in strs :
dp[i]=min(dp[i], dp[i-k]+1)
if dp[-1]==float('inf') :
return -1
else : return dp[-1]
Python
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ
dp[i]๋ ๋ฌธ์์ด t์ index i ๊น์ง ๋ง๋ค ์ ์๋ ๋จ์ด์กฐ๊ฐ ์ค ์ต์๊ฐ์๋ฅผ ์๋ฏธํ๋ค.
1.
t์ ๊ธธ์ด+1๋งํผ์ dp ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ฅ ํฐ ์๋ก ์ด๊ธฐํ ์์ผ์ค๋ค.
2.
dp[0]์ 0์ผ๋ก ์ด๊ธฐํ์ํจ๋ค.
3.
1๋ถํฐ n๊น์ง dp ๋ฆฌ์คํธ๋ฅผ ์ฑ์๋๊ฐ๋ค.
a.
strs์ ๋จ์ด์กฐ๊ฐ์ ๊ธธ์ด๊ฐ 1์ด์ 5์ดํ์ด๋ฏ๋ก 1๋ถํฐ 5๊น์ง ๋ฐ๋ณตํ๋ค.
b.
i-k๋ถํฐ t์ ํ์ฌ ์ธ๋ฑ์ค๊น์ง์ ๋์ผํ ๋จ์ด์กฐ๊ฐ์ด ์๋์ง ํ์ธ์ ํ๋ค.
c.
์์ผ๋ฉด ํ์ฌ dp ๊ฐ๊ณผ dp[i-k]+1 ํ ๊ฐ์ค ์ต์๊ฐ์ผ๋ก ๊ฐฑ์ ํ๋ค.
4.
dp[-1](t๋ฅผ ๋ง๋ค ์ ์๋ ์ต์ ๊ฐ์)๊ฐ ์ฒ์ ์ด๊ธฐ๊ฐ์ด๋ฉด -1์ ๋ฐํํ๊ณ ์๋๋ฉด ๋ง๋ค์ ์๋ ์ต์ ๋จ์ด ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
์์
strs : ["app","ap","p","l","e","ple","pp"]
t : "apple"
1.
i๊ฐ 1์ผ ๋ โaโ๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก dp[1]=โinfโ์ด๋ค.
2.
i๊ฐ 2์ผ ๋ โapโ๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ
a.
โpโ๋ก ๋ง๋๋ ๊ฒฝ์ฐ dp[2]์ dp[1]+1(โinfโ) ์ค์ ์ต์ ์ด๋ฏ๋ก dp[2]๋ ๊ฐฑ์ ๋์ง ์๋๋ค.
b.
โapโ๋ก ๋ง๋๋ ๊ฒฝ์ฐ dp[2]์ dp[0]+1 ์ค์ ์ต์ ์ด๋ฏ๋ก dp[2]=1
3.
i๊ฐ 3์ผ ๋ โappโ์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ
a.
โpโ๋ก ๋ง๋๋ ๊ฒฝ์ฐ๋ dp[3]๊ณผ dp[2]+1 ์ค์ ์ต์์ด๋ฏ๋ก dp[3]=2
b.
โppโ๋ก ๋ง๋๋ ๊ฒฝ์ฐ๋ dp[3]๊ณผ dp[1]+1=โinfโ ์ค์ ์ต์์ด๋ฏ๋ก ๊ฐฑ์ ๋์ง ์๋๋ค.
c.
โappโ๋ก ๋ง๋๋ ๊ฒฝ์ฐ๋ dp[3]๊ณผ dp[0]+1 ์ค์ ์ต์์ด๋ฏ๋ก dp[3]=1
4.
i๊ฐ 4์ผ ๋ โapplโ๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ
a.
โlโ๋ก ๋ง๋๋ ๊ฒฝ์ฐ dp[4]์ dp[3]+1 ์ค์ ์ต์์ด๋ฏ๋ก dp[4]=2
5.
i๊ฐ 5์ผ ๋ โappleโ๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ
a.
โeโ๋ก ๋ง๋๋ ๊ฒฝ์ฐ dp[5]์ dp[4]+1 ์ค์ ์ต์์ด๋ฏ๋ก dp[5]=3
b.
โpleโ๋ก ๋ง๋๋ ๊ฒฝ์ฐ dp[5]์ dp[2]+1 ์ค์ ์ต์์ด๋ฏ๋ก dp[5]=2