π€λ¬Έμ ν΄κ²°
Lv4 | λ€μ΄λλ―Ή νλ‘κ·Έλλ°
νμ΄ λ°©λ²μ
- μμμ λΆν° λ¬Έμ νλνλ μ ννλ€. 'b', 'a', 'n', ...
- κ·Έ λ¬Έμλ‘ λλλ λ¨μ΄κ° strsμ λ€μ΄μλμ§ νμΈνλ€.
- μμΌλ©΄ νμ¬κΉμ§ μΌλ λ¨μ΄ κ°μ(dp[i])μ κ·Έ λ¬Έμλ₯Ό μ¬μ©νμ λμ λ¨μ΄ κ°μλ₯Ό λΉκ΅ν΄μ μ΅μκ°μΌλ‘ κ°±μ
(λ§μ΄ λ무 μ΄λ ΅λ€...)
- ["ba", "na", "n", "a"] μ "banana"λ‘ ν μ€νΈ ν΄λ³΄λ©΄
- 맨μ²μ "b"λ‘ λλλ λ¨μ΄λ μμΌλ―λ‘ pass
- λ€μ "a"λ‘ λλλ λ¨μ΄λ "a"μ "ba"κ° μλ€. - "na"λ 쑰건μ λ§μ§ μμ
"a"λ₯Ό μ ννμ λλ μ무μΌλ μλ€. why? μ²μμ bλ‘ λλλ λ¨μ΄κ° μμ΄μ κ°μ΄ 무νλμΈ μν
"ba"λ₯Ό μ ννλ©΄ 1λ‘ κ°±μ ν΄μ€λ€. - (λ¨μ΄ νλλ§μΌλ‘ "ba"λ₯Ό λ§λ€μλ€λ λ») - λ€μμ "n"μΌλ‘ λλλ λ¨μ΄ "n"μ΄ μλ€. κΈ°μ‘΄μ "ba"λ₯Ό λ§λ€ λ μ΅μκ°(1κ°)λ‘ λ§λ€μμΌλ―λ‘ "n"μ μΆκ°ν΄μ 2κ°λ‘ "ban"μ λ§λ λ€λ λ» | νμ¬ dp = [0, inf, 1, 2, ... | 맨 μμ 0μ 무μ
- λ€μμ "a"μΌλ‘ λλλ λ¨μ΄ "a"μ "na"κ° μλ€. - "ba"λ 쑰건μ λ§μ§ μμ
"a" μ ν: μμμ "ban"μ λ§λ€ λ 2κ°(dp[3])λ₯Ό μΌλ€. "a"λ₯Ό μΆκ°νμΌλ―λ‘ μ΄μ 3κ° dp = [0, inf, 1, 2, 3, ...
"na" μ ν: μμμ "ba"λ₯Ό λ§λ€ λ 1κ°(dp[2])λ₯Ό μΌλ€. "na"λ₯Ό μΆκ°νμΌλ―λ‘ μ΄μ 2κ° dp = [0, inf, 1, 2, 2, ... - μ΄λ κ² νλ€λ³΄λ©΄ dp λ§μ§λ§μ μ΅μ’ κ°μκ° λ€μ΄κ°λ€.
π¨ DPλ μλ μ΄λ €μ΄λ° Lv4λΌμ λ μ΄λ €μ΄λ―νλ€...
π»μμ€ μ½λ
def solution(strs, t):
n = len(t)
dp = [0] * (n + 1)
strs = set(strs) # setμ μ¬μ©νλ©΄ νμν λ μκ°λ³΅μ‘λ O(1)
for i in range(1, n + 1):
dp[i] = float('inf') # iλ²μ§Έ μμμ μ΅λκ°μΌλ‘ λ°κΏμ€(μ΅μκ° λΉκ΅λ₯Ό μν΄)
for k in range(1, 6):
# μΈλ±μ€ λ²μ λλ¬Έμ..
if i - k < 0:
s = 0
else:
s = i - k
if t[s:i] in strs:
dp[i] = min(dp[i], dp[i - k] + 1)
if dp[-1] == float('inf'):
answer = -1
else:
answer = dp[-1]
return answer
πλ¬Έμ νμΈ
μΆμ²: νλ‘κ·Έλλ¨Έμ€
λ§ν¬: https://programmers.co.kr/learn/courses/30/lessons/12983
λ¬Έμ μ€λͺ
λ¨μ΄ νΌμ¦μ μ£Όμ΄μ§ λ¨μ΄ μ‘°κ°λ€μ μ΄μ©ν΄μ μ£Όμ΄μ§ λ¬Έμ₯μ μμ±νλ νΌμ¦μ λλ€. μ΄λ, μ£Όμ΄μ§ κ° λ¨μ΄ μ‘°κ°λ€μ κ°κ° 무νκ°μ© μλ€κ³ κ°μ ν©λλ€. μλ₯Ό λ€μ΄ μ£Όμ΄μ§ λ¨μ΄ μ‘°κ°μ΄ [“ba”, “na”, “n”, “a”]μΈ κ²½μ° ba, na, n, a λ¨μ΄ μ‘°κ°μ΄ κ°κ° 무νκ°μ© μμ΅λλ€. μ΄λ, λ§λ€μ΄μΌ νλ λ¬Έμ₯μ΄ “banana”λΌλ©΄ “ba”, “na”, “n”, “a”μ 4κ°λ₯Ό μ¬μ©νμ¬ λ¬Έμ₯μ μμ±ν μ μμ§λ§, “ba”, “na”, “na”μ 3κ°λ§μ μ¬μ©ν΄λ “banana”λ₯Ό μμ±ν μ μμ΅λλ€. μ¬μ© κ°λ₯ν λ¨μ΄ μ‘°κ°λ€μ λ΄κ³ μλ λ°°μ΄ strsμ μμ±ν΄μΌ νλ λ¬Έμμ΄ tκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μ£Όμ΄μ§ λ¬Έμ₯μ μμ±νκΈ° μν΄ μ¬μ©ν΄μΌ νλ λ¨μ΄μ‘°κ° κ°μμ μ΅μκ°μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄ μ£ΌμΈμ. λ§μ½ μ£Όμ΄μ§ λ¬Έμ₯μ μμ±νλ κ²μ΄ λΆκ°λ₯νλ©΄ -1μ return νμΈμ.
μ νμ¬ν
- strsλ μ¬μ© κ°λ₯ν λ¨μ΄ μ‘°κ°λ€μ΄ λ€μ΄μλ λ°°μ΄λ‘, κΈΈμ΄λ 1 μ΄μ 100 μ΄νμ λλ€.
- strsμ κ° μμλ μ¬μ© κ°λ₯ν λ¨μ΄μ‘°κ°λ€μ΄ μ€λ³΅ μμ΄ λ€μ΄μμ΅λλ€.
- μ¬μ© κ°λ₯ν λ¨μ΄ μ‘°κ°λ€μ λ¬Έμμ΄ ννμ΄λ©°, λͺ¨λ λ¨μ΄ μ‘°κ°μ κΈΈμ΄λ 1 μ΄μ 5 μ΄νμ λλ€.
- tλ μμ±ν΄μΌ νλ λ¬Έμμ΄μ΄λ©° κΈΈμ΄λ 1 μ΄μ 20,000 μ΄νμ λλ€.
- λͺ¨λ λ¬Έμμ΄μ μνλ²³ μλ¬Έμλ‘λ§ μ΄λ£¨μ΄μ Έ μμ΅λλ€.
μ μΆλ ₯ μ
strs | t | result |
[ba,na,n,a] | banana | 3 |
[app,ap,p,l,e,ple,pp] | apple | 2 |
[ba,an,nan,ban,n] | banana | -1 |
μ μΆλ ₯ μ μ€λͺ
μ
μΆλ ₯ μ #1
λ¬Έμ μ μμμ κ°μ΅λλ€.
μ
μΆλ ₯ μ #2
ap 1κ°, ple 1κ°μ μ΄ 2κ°λ‘ appleμ λ§λ€ μ μμΌλ―λ‘ νμν λ¨μ΄ κ°μμ μ΅μκ°μ 2λ₯Ό return ν©λλ€.
μ
μΆλ ₯ μ #3
μ£Όμ΄μ§ λ¨μ΄λ‘λ bananaλ₯Ό λ§λ€ μ μμΌλ―λ‘ -1μ return ν©λλ€.
'Algorithm Problem > Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[python] νλ‘κ·Έλλ¨Έμ€ - μ§ν νΈμ§ (2) | 2020.09.16 |
---|---|
[python] νλ‘κ·Έλλ¨Έμ€ - μ«μ λΈλ‘ (1) | 2020.09.15 |
[python] νλ‘κ·Έλλ¨Έμ€ - μ§κ²λ€λ¦¬ (4) | 2020.09.13 |
[python] νλ‘κ·Έλλ¨Έμ€ - N-Queen (2) | 2020.09.13 |
[python] νλ‘κ·Έλλ¨Έμ€ - λλμ§ (0) | 2020.09.12 |