[ํŒŒ์ด์ฌ/python] ๋™์ ๊ณ„ํš๋ฒ• (Dynamic Programming)

2021. 3. 25. 01:29

๋™์ ๊ณ„ํš๋ฒ•, Dynamic Programming์€ ์•„๋ž˜ ๋‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  1. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ : ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž‘์€ ๋ฌธ์ œ์˜ ๋‹ต์„ ๋ชจ์•„ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ
  2. ์ค‘๋ณต ๋ถ€๋ถ„ ๊ตฌ์กฐ : ๋™์ผํ•œ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•ด๊ฒฐ

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ™์ด ์ตœ์ ํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ

์ƒํ–ฅ์‹ ์ ‘๊ทผ์ด๋ฉฐ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ•ต์‹ฌ ๊ธฐ์ˆ ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)์ด๋ž€, ๋™์ผํ•œ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๋•Œ ์ด์ „์— ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•จ์œผ๋กœ์จ

๋™์ผํ•œ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋„๋กํ•˜์—ฌ ์‹คํ–‰์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

 

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด๋‚˜ ์žฌ๊ท€ํ•จ์ˆ˜์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ด๋ฉฐ ์ ํ™”์‹์„ ์ฐพ๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค.

๋ฌธ์ œ์˜ ์ˆœํ™˜์ ์ธ ์„ฑ์งˆ์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ํ™”์‹์„ ์ด์šฉํ•˜์—ฌ ์žฌ๊ท€์ ์œผ๋กœ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

๊ฐ€์žฅ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋ถ€ํ„ฐ ํ•ด๋ฅผ ๊ตฌํ•œ ๋’ค ์ €์žฅํ•˜๊ณ  ๊ทธ ํ•ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋” ํฐ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

# ๋ฉ”๋ชจ์ด์ œ์ด์…˜ : ์ž‘์€ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ
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]

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

1. ์ ํ™”์‹์„ ์ฐพ์•„ ์žฌ๊ท€์ ์œผ๋กœ ์ •์˜ํ•œ๋‹ค.

fibo(x - 1) + fibo(x - 2)

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ์ ํ™”์‹์€ ์œ„์™€ ๊ฐ™์œผ๋ฏ€๋กœ fiboํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์žฌ๊ท€์ ์œผ๋กœ ์ •์˜ํ•˜์˜€๋‹ค.

 

2. ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.

d = [0] * 100

d[x] = fibo(x - 1) + fibo(x - 2)

์ €์žฅํ•  ๊ณต๊ฐ„์ธ d๋ฅผ ๋งŒ๋“ค๊ณ  x๊ฐ’์— ๋Œ€ํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ๊ฐ’์„ d์— ์ €์žฅํ•œ๋‹ค.

 

3. ์›ํ•˜๋Š” ๊ฐ’์˜ ํ•ด๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด, ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์ง€์•Š๊ณ  ์ €์žฅ๋œ ๊ฐ’์„ returnํ•œ๋‹ค.

if d[x] != 0:
        return d[x]

์ข…๋ฃŒ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ์ˆ˜ x์— ๋Œ€ํ•˜์—ฌ d์— x์— ๋Œ€ํ•œ ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„,

์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด d[x]๋ฅผ return ํ•œ๋‹ค.

728x90

BELATED ARTICLES

more