DP, ๋์ ๊ณํ๋ฒ
>> ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ์ชผ๊ฐ์ ๋ ํฐ ๋ฌธ์ ์ ๋ต์ ๊ตฌํ๋ ๊ฒ์ ๋ฐ๋ณต ํ๋ ํจ๋ฌ๋ค์ (๋ถํ ์ ๋ณต๊ณผ ๋น์ทํ๋ค)
๋ถํ ์ ๋ณต๊ณผ DP ์ ์ฐจ์ด๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
Memoization ๋ฉ๋ชจ์ด์ ์ด์ , ํ ๋ฒ ๊ตฌํ ๋ต๋ค์ ์ ์ฅํด๋์!
>> ๋ถ๋ถ ๋ฌธ์ ๋ค์ ๋ต์ ์ ์ญ ๋ณ์ ๋ฆฌ์คํธ ๊ฐ์ ๊ฒ์ ๋ฃ๊ณ ์ฌ์ฉํ ๋๋ง๋ค ๊บผ๋ด ์จ์ผ ํ๋ค.
Top-down ? Bottom-Up?
Top-down | Bottom-Up |
์ฌ๊ท | ๋ฐ๋ณต๋ฌธ |
ํฐ๊ฑฐ โก ์์ ๊ฑฐ | ์์ ๊ฑฐ โก ํฐ๊ฑฐ |
์ง๊ด์ / ์ฝ๋ ๊ฐ๋ ์ฑ ๐ | ๋ ์ง๊ด์ (๋ฌธ์ ๋ฐ๋ผ ๋ค๋ฆ) ์๊ฐ-๋ฉ๋ชจ๋ฆฌ save ์ฌ์ง O |
๋ฐฑ์ค ๋ฌธ์ ํ๋ฉฐ DP ์ ํ ์ดํด ํ๊ธฐ
DP ์ ํ์ ์๋ 3๊ฐ์ง๋ฅผ ์ฐพ๊ฒ ๋ค๋ ์๊ฐ์ ํ๊ณ , ์ฐพ์ ํ ํ์ด๋๊ฐ์ผํ๋ค.
1. ์ ์: f(i) = i๋ฒ์งธ ํผ๋ณด๋์น ์. ์
๋ ฅ N์ ๋ํด f(N)์ ์ถ๋ ฅํ๋ค.
2. ์ด๊ธฐ๊ฐ: ๐0 = 0, ๐1 = 1
3. ์ ํ์: f(i) = f(i-2) + f(i-1)
# ๋ฐฑ์ค 2748 ํผ๋ณด๋์น ์
f(i) = i๋ฒ์งธ ํผ๋ณด๋์น ์. ์
๋ ฅ N์ ๋ํด f(N)์ ์ถ๋ ฅํ๋ค.
์ด๊ธฐ๊ฐ: ๐0 = 0, ๐1 = 1
์ ํ์: f(i) = f(i-2) + f(i-1)
import sys
n = int(input())
cache = [0] * (n+1)
cache[0] = 0
cache[1] = 1
for i in range(2, n+1):
cache[i] = cache[i-1] +cache[i-2]
print(cache[n])
# ๋ฐฑ์ค 11051 ์ดํญ ๊ณ์
f(i) = iCk
์ด๊ธฐ๊ฐ: f(0,0) = 1, f(1,0)= 1, f(1,1) = 1 & i==k ์ด๋ฉด 1
์ ํ์: f(i,k) = f(i-1, k-1) + f(i-1,k)
N, K = map(int, input().split())
cache=[]
for i in range(N+1):
cache.append([1]*(i+1))
for i in range(2, N+1):
for j in range(1,i):
cache[i][j] = (cache[i-1][j-1] +cache[i-1][j])%10007
print(cache[N][K])
# ๋ฐฑ์ค 11726 2xN ํ์ผ๋ง
f(i) = 2*i
์ด๊ธฐ๊ฐ: f(1) = 1, f(2) = 2
์ ํ์: f(i) = f (i-1) +f(i-2)
import sys
sys.setrecursionlimit(10**6)
n = int(input()) # n<=1000
cache =[0]*(n+1)
cache[1] =1
cache[2] =2
def f(n):
if n<3:
return cache[n]
if cache[n] != 0:
return cache[n]%10007
else:
cache[n] = f(n-1)+f(n-2)
return cache[n]%10007
print(f(n))
'CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ!์!] ๋ฐฑ์ค ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ํ๊ธฐ ์ฝ๊ฒ VSCODE ์ธํ ํ๊ธฐ (0) | 2022.06.09 |
---|---|
Mac VScode C ์ธ์ด ํ๊ฒฝ ์ค์ + VScode ์์ ์ญ์ ๋ฐฉ๋ฒ (0) | 2022.01.13 |
[Python] DFS & BFS (0) | 2021.05.12 |
[Python]๋ฐฑ์ค 1764 ::๋ฃ๋ณด์ก ๋ฌธ์ ํ์ด (0) | 2021.05.12 |
[Python]๋ฐฑ์ค 1874 ::์คํ์์ด ๋ฌธ์ ํ์ด (0) | 2021.05.12 |
๋๊ธ