[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋จ์ด ํผ์ฆ(2017 ํ์คํ์ด)
๐ค๋ฌธ์ ํด๊ฒฐ
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
programmers.co.kr
๋ฌธ์ ์ค๋ช
๋จ์ด ํผ์ฆ์ ์ฃผ์ด์ง ๋จ์ด ์กฐ๊ฐ๋ค์ ์ด์ฉํด์ ์ฃผ์ด์ง ๋ฌธ์ฅ์ ์์ฑํ๋ ํผ์ฆ์ ๋๋ค. ์ด๋, ์ฃผ์ด์ง ๊ฐ ๋จ์ด ์กฐ๊ฐ๋ค์ ๊ฐ๊ฐ ๋ฌดํ๊ฐ์ฉ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฃผ์ด์ง ๋จ์ด ์กฐ๊ฐ์ด [โ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 ํฉ๋๋ค.