๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (Dynamic Programming) : DP
๊ฐ๋
: ๋ฌธ์ ๋ฅผ ๋ ์์ ๋จ์๋ก ์ชผ๊ฐ์ด ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ. (๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น์ทํ๋ค. ์ฐจ์ด์ ์ ๋ฐ๋ก ์๋ซ์ค.)
ํต์ฌ์, ๊ทธ ์์ ๋จ์์ ๋ฌธ์ ๋ค์ด ๋ฐ๋ณตํด์ ์ผ์ด๋๊ธฐ ๋๋ฌธ์, ๊ทธ๊ฐ๋ค์ ์ ์ฅํด๋๋ ์์ผ๋ก ํด๊ฒฐํด๋๊ฐ๋ ์๊ณ ๋ฆฌ์ฆ
(๋ค์ด๋๋ฏน์ด๋ผ๋ ์ด๋ฆ์๋ ์๋ฌด ๋ป๋ ์๋ค๊ณ ํ๋ค.)
*๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ๊ธฐ ์ํ ์กฐ๊ฑด
1. ๋ถ๋ถ ๋ฌธ์ ๋ค์ด ๊ฒน์น๋๊ฐ (๋ฐ๋ณต ๋๋๊ฐ)
ex ) ํผ๋ณด๋์น ์ : N๋ฒ์งธ ํญ (ํฐ ๋ฌธ์ ) = N-1๋ฒ์งธ ํญ (์์ ๋ฌธ์ ) + N-2 ๋ฒ์งธ ํญ (์์ ๋ฌธ์ )
ํผ๋ณด๋์น์ ํน์ฑ์ ์ ์ดํด๋ณด๋ฉด Fibo(10)์ ๊ตฌํ ๋๋ Fibo(9)+Fibo(8)...........Fibo(1) ๊น์ง ๋ชจ๋ ํ์ํฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ์ด์ ์ด์
์ ํตํด ๋ฐฐ์ด์ ์ ์ฅํด๋๋๋ค๋ฉด, Fibo(12)๋ฅผ ๊ตฌํ ๋๋ , 1~10๋ฒ์งธ ํญ๊น์ง ์ด๋ฏธ ๋ฉ๋ชจ๊ฐ ๋์ด์์ผ๋ฏ๋ก, 11๋ฒ์งธ ํญ๋ง ์ฐ์ฐํ๋ฉด ๋๋ฏ๋ก ํจ์จ์ ์
๋๋ค.
* ์ฌ๊ทํจ์๋ก ๊ตฌํํ ํผ๋ณด๋์น (Python)
def fibonacci(n):
if n<=1 :
return n
else : return fibonacci(n-1) + fibonacci(n-2)
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๊ตฌํํ ํผ๋ณด๋์น (memoization)
memo = [0 for i in range(100)]
def fibonacci(n):
if n<=1 :
return n
else :
if memo[n] > 0 :
return memo[n]
memo[n] = fibonacci(n-1) + fibonacci(n-2)
return memo[n]
ํ๋ฒ ๊ฑฐ์ณค๋ ํญ๋ค์ ๋ชจ๋ memo์ ์ ์ฅ๋๋ค. ๋ฐ๋ผ์, ๋ค์์ ๊ตฌํ ๋๋ ์ฐ์ฐ์์ด ๋ฆฌํด์ด ๊ฐ๋ฅํ๋ค.
2. ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ (๋ฌธ์ ์ ์ ๋ต์ ์์ ๋ฌธ์ ์ ์ ๋ต์ผ๋ก๋ถํฐ ๊ตฌํ ์ ์๋๊ฐ)
ex ) ์ต๋จ๊ฒฝ๋ก ๊ตฌํ๊ธฐ : A์์ C ๋ก ๊ฐ๋ ์ต๋จ๊ฒฝ๋ก (ํฐ ๋ฌธ์ ) = A์์ B ๋ก๊ฐ๋ ์ต๋จ๊ฒฝ๋ก(์์ ๋ฌธ์ ) + B์์ C ๋ก๊ฐ๋ ์ต๋จ๊ฒฝ๋ก(์์ ๋ฌธ์ )
๋ฐ๋ผ์, ์ ๋ต์ ํ๋ฒ ๊ตฌํ์ผ๋ฉด Memoization ํ์ฌ, ๋ฐ๋ณต์ฐ์ฐ์ ์์ ๋ ๊ณผ์ ์ด ์ค์ํ๋ค.
*๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ๊ตฌํ
*Top - down : ์์์ ์๋๋ก ํด๊ฒฐํ๋ค. (ex : ์ฌ๊ทํจ์ )
๋ฌธ์ ๋ฅผ ์ชผ๊ฐ ๋ค.
์์ ๋ฌธ์ ๋ฅผ ํผ๋ค.
์์ ๋ฌธ์ ์ ์ ๋ต์ผ๋ก ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
*bottom - up : ์๋์์ ์๋ก (ex : ๋ฐ๋ณต๋ฌธ )
์์ ๋ฌธ์ ๋ถํฐ ํ์ด๋๊ฐ๋ค.
๋ฌธ์ ์ ํฌ๊ธฐ๋ฅผ ์ ์ ํฌ๊ฒ ๋ง๋ค์ด ํผ๋ค.
์์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์, ํ๋จ๊ณ ์์ ํฐ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
์ต์ข
์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
์๊ฐ๋ณต์ก๋๋ ๋น์ทํ ์์ค์ด๋ฉฐ, ๋ฌธ์ ์ ๋ฐ๋ผ ๊ตฌํํ๊ธฐ ํธํ๊ฒ์ ์ ํ ํ์ฌ ํ๋ฉด ๋๋ค. (์ฆ, ์ด๋ค๊ฒ์ผ๋ก ํ์ด๋ ํฐ ์๊ด์ ์๋ค) ๋ค๋ง ํ์ด์ฌ ๊ฐ์๊ฒฝ์ฐ๋ ์ฌ๊ท๋ก ํ๊ฒ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ์ด๊ณผ๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ํ ์ธ์ด๋ณด๋ค ๋๊ธฐ ๋๋ฌธ์, ๋ฐ๋ณต๋ฌธ(bottom_up)์ผ๋ก ํธ๋๊ฒ ๋ซ๋ค๊ณ ํ๋ค.
*๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋
์ ํ์ ์ ์ ์ํ๋ค.
๋ฌธ์ ๋ฅผ ์ด๋ ํ์์ผ๋ก ์ชผ๊ฐค์ง (์๊ฒ ๋ง๋ค์ง) ์๊ฐํ๋ค.
์์ ๋ฌธ์ ์ ๋ต์ ํตํด ์ด๋ป๊ฒ ์ต์ข
์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ง ์๊ฐํ๋ค.
์๋ฅผ๋ค์ด ์นด๋๋ฅผ i ๊ฐ ๊ตฌ๋งคํ๋ ๋ฌธ์ ๋ผ๊ณ ํ๋ฉด, ํ๋ ๊ตฌ๋งคํ ๋, ๋๊ฐ ๊ตฌ๋งคํ ๋, ์ฐจ๊ทผ์ฐจ๊ทผ ์๊ฐํด๋ณด๊ณ , ์ ์ด๋ณด๋ฉด ๊ท์น์ด ๋ณด์ด๊ฑฐ๋ ์ ํ์์ด ๋ณด์ธ๋ค. ๋น์ทํ ์ ํ์ ํ์ด๋ณด๋ฉฐ ๊ฐ์ ๊ธฐ๋ฅด๋๊ฒ ๋ฌด์๋ณด๋ค ์ค์ํ๊ฒ ๊ฐ๋ค.
* ๊ด๋ จ ์ ํ ๋ฌธ์ (boj)
์นด๋ ๊ตฌ๋งคํ๊ธฐ 1 (๋์ด๋ ์ค๋ฒ1)
https://infinitt.tistory.com/250
๋ฐฑ์ค (boj) ํ์ด์ฌ - 11052 ๋ฒ : ์นด๋ ๊ตฌ๋งคํ๊ธฐ
๋ฌธ์ ๋งํฌ : https://www.acmicpc.net/problem/11052 11052๋ฒ: ์นด๋ ๊ตฌ๋งคํ๊ธฐ ์ฒซ์งธ ์ค์ ๋ฏผ๊ท๊ฐ ๊ตฌ๋งคํ๋ ค๊ณ ํ๋ ์นด๋์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000) ๋์งธ ์ค์๋ Pi๊ฐ P1๋ถํฐ PN๊น์ง ์์๋๋ก ์ฃผ์ด..
infinitt.tistory.com
์นด๋ ๊ตฌ๋งคํ๊ธฐ 2 (๋์ด๋ ์ค๋ฒ1)
https://infinitt.tistory.com/251
๋ฐฑ์ค (boj) ํ์ด์ฌ - 16194๋ฒ : ์นด๋ ๊ตฌ๋งคํ๊ธฐ 2 (DP)
๋ฌธ์ ๋งํฌ : https://www.acmicpc.net/problem/16194 16194๋ฒ: ์นด๋ ๊ตฌ๋งคํ๊ธฐ 2 ์ฒซ์งธ ์ค์ ๋ฏผ๊ท๊ฐ ๊ตฌ๋งคํ๋ ค๊ณ ํ๋ ์นด๋์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000) ๋์งธ ์ค์๋ Pi๊ฐ P1๋ถํฐ PN๊น์ง ์์๋๋ก ์ฃผ..
infinitt.tistory.com
2xN ํ์ผ๋ง (๋์ด๋ ์ค๋ฒ3)
https://infinitt.tistory.com/217
๋ฐฑ์ค (boj) ํ์ด์ฌ - 11727 2xN ํ์ผ๋ง
๋ฌธ์ ๋งํฌ : https://www.acmicpc.net/problem/11727 11727๋ฒ: 2×n ํ์ผ๋ง 2 ์ฒซ์งธ ์ค์ 2×n ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ 10,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค. www.acmicpc.net n์ด ๋์ด๋ ์๋ก..
infinitt.tistory.com