์ƒˆ์†Œ์‹

๐Ÿงฎ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Dynamic Programming)

  • -

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (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 : ์žฌ๊ท€ํ•จ์ˆ˜)

  1. ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐ ๋‹ค.
  2. ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค.
  3. ์ž‘์€ ๋ฌธ์ œ์˜ ์ •๋‹ต์œผ๋กœ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

*bottom - up : ์•„๋ž˜์—์„œ ์œ„๋กœ (ex : ๋ฐ˜๋ณต๋ฌธ)

  1. ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ํ’€์–ด๋‚˜๊ฐ„๋‹ค.
  2. ๋ฌธ์ œ์˜ ํฌ๊ธฐ๋ฅผ ์ ์  ํฌ๊ฒŒ ๋งŒ๋“ค์–ด ํ‘ผ๋‹ค.
  3. ์ž‘์€ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ๋‹จ๊ณ„ ์œ„์˜ ํฐ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
  4. ์ตœ์ข…์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

 

 

์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋น„์Šทํ•œ ์ˆ˜์ค€์ด๋ฉฐ, ๋ฌธ์ œ์— ๋”ฐ๋ผ ๊ตฌํ˜„ํ•˜๊ธฐ ํŽธํ•œ๊ฒƒ์„ ์„ ํƒํ•˜์—ฌ ํ’€๋ฉด ๋œ๋‹ค. (์ฆ‰, ์–ด๋–ค๊ฒƒ์œผ๋กœ ํ’€์–ด๋„ ํฐ ์ƒ๊ด€์€ ์—†๋‹ค) ๋‹ค๋งŒ ํŒŒ์ด์ฌ ๊ฐ™์€๊ฒฝ์šฐ๋Š” ์žฌ๊ท€๋กœ ํ’€๊ฒŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ํƒ€ ์–ธ์–ด๋ณด๋‹ค ๋†’๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ˜๋ณต๋ฌธ(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

 

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.