ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ - (3) ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
๐๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (๋์ ๊ณํ๋ฒ)
: ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ ์ฌ์ฉํ์ฌ ์ํ ์๊ฐ ํจ์จ์ฑ์ ๋น์ฝ์ ์ผ๋ก ํฅ์์ํค๋ ๋ฐฉ๋ฒ
: ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ฅํ์ฌ ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ํจ
ํ๋ค์ด(ํํฅ์) : ์ด์ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์ผ์์ ์ผ๋ก ๊ธฐ๋กํด๋๋ ๊ฐ๋ (= ๋ฉ๋ชจ์ด์ ์ด์ )์ ํ์ฉ.
๋ณดํ ์ (์ํฅ์)
์กฐ๊ฑด
- ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ
- ์ค๋ณต๋๋ ๋ถ๋ถ ๋ฌธ์
๋ํ์ ์ธ ์์ : ํผ๋ณด๋์น ์์ด
def fibo(x): # 1,1,2,3,5,8,13...
if x == 1 or x == 2; #์ฒซ๋ฒ์งธ, ๋๋ฒ์งธ ๊ฐ์ด 1์ด๋ผ๋ ๊ฑธ ๋ช
์
return 1
return fibo(x - 1) + fibo(x-2)
print(fibo(4))
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ํ์ฉํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ค.
# ํ๋ค์ด ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ - ํผ๋ณด๋์น ์์ด
d = [0]* 100 # ํ ๋ฒ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํด๋๋ ๊ณณ
def fibo(x):
if x == 1 or x == 2:
return 1
if d[x] != 0: # ์ด๋ฏธ ๊ณ์ฐํ ์ ์๋ ๋ฌธ์ ๋ผ๋ฉด
return d[x]
d[x] = fibo(x - 1) + fibo(x - 2)
return d[x]
print(fibo(99))
# ๋ณดํ
์
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ - ํผ๋ณด๋์น ์์ด
d = [0] * 100
d[1] = 1
d[2] = 1
n = 99
for i in range(3, n+1): # ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ๊ตฌํ (์์ ๋ฌธ์ -> ํฐ ๋ฌธ์ ์์๋ก ํด๊ฒฐ)
d[i] = d[i-1] + d[i-2]
print(d[n])
* ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ถํ ์ ๋ณต
๊ณตํต์ : ๋ชจ๋ ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋ ์ฌ์ฉํ ์ ์๋ค.
์ฐจ์ด์ : ๋ถ๋ถ ๋ฌธ์ ์ ์ค๋ณต -> ๋ถํ ์ ๋ณต์์ ๋์ผํ ๋ถ๋ถ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๊ณ์ฐ๋์ง ์์
EX)
# ๋ณดํ
์
๋ฐฉ์
d = [0] * 30001 # ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ธฐ ์ํจ
for i in range( 2, x+1): # ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ๊ฐฑ์
d[i] = d[i-1] + 1
if i % 2 == 0:
d[i] = min(d[i], d[i//2] + 1)
if i % 3 == 0:
d[i] = min(d[i], d[i//3] + 1)
if i % 5 == 0:
d[i] = min(d[i], d[i//5] + 1)
print(d[x])
# ํจ์จ์ ์ธ ํํ ๊ตฌ์ฑ
d = [10001] * (m+1) # ๋ง๋ค์ด์ผ ํ๋ ํํ m์ ๋ชจ๋ ์ธ๋ฑ์ค ์ ์ฅ ๊ณต๊ฐ
d[0] = 0
for i in range(n): #ํํ ๊ฐ์๋ง๋ค ํ์ธ
for j in range(array[i], m+1):
if d[i-array[i]] != 10001:
d[j] = min(d[j], d[j-array[i]] + 1) # ๊ธฐ์กด์ ๋ง๋ ๋ฐฉ์์ ๊ฐ์์ ๋น๊ตํ์ฌ ๋ ์์ ๊ฐ
if d[m] == 10001:
print(-1)
else:
print(d[m])
*๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (LIS)
array = { 4,2,5,8,4,11,15}
result = {4,5,8,11,15} or {2,5,8,11,15}
dp ๊ฐ์ ์๋ฏธ
: ํด๋น ๊ฐ์ด ๋ง์ง๋ง ์์ด์ด ๋์์ ๋ ์ธ๋ฑ์ค ๊ฐ.
dp = [1] * n
for i in range(1, n):
for j in range(0, i):
if array[j] < array[i]:
df[i] = max(dp[i], dp[j] + 1)
print(n - max(dp)) #์ต์ ๋ณ๋ ฅ ์ด์ธ ์