CS/Algorithm

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

deo2kim 2020. 10. 1. 20:28
๋ฐ˜์‘ํ˜•

๋ถ„ํ•  ์ •๋ณต
๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๐Ÿ“” ๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming)์ด๋ž€

  • ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋Š” ๋‹จ ํ•œ ๋ฒˆ๋งŒ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•! ๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ (์ดํ•˜ DP)
  • ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ถ„ํ• ์ •๋ณต๊ณผ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ถ„ํ• ์ •๋ณต์˜ ๊ฒฝ์šฐ ํ•œ๋ฒˆ ํ’€์—ˆ๋˜ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ํ‘ธ๋Š” ๋น„ํšจ์œจ์ ์ธ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. (์ผ๋ถ€ ๊ฒฝ์šฐ ์ œ์™ธ (๋ณ‘ํ•ฉ์ •๋ ฌ))
  • ๋ถ„ํ• ์ •๋ณต๊ณผ DP์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด ์žˆ๋‹ค.
    • ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด: ๋ฐ”๋กœ ์•ž๊ณผ ์•ž์•ž ๋‘ ์นธ์˜ ์ˆซ์ž์˜ ํ•ฉ์„ ๊ตฌํ•ด์„œ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์—ด
    • 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
    • ๋ถ„ํ• ์ •๋ณต์„ ์ด์šฉํ•œ๋‹ค๋ฉด ์ด๋ฏธ ๊ตฌํ•œ ์ˆซ์ž๋“ค์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

์ถœ์ฒ˜: https://blog.naver.com/ndb796/221233570962

  • ์œ„์˜ ์‚ฌ์ง„์„ ๋ณด๋ฉด 13์„ ๊ตฌํ•˜๋Š”๊ฒŒ 2๋ฒˆ, 12 3๋ฒˆ, 11 3๋ฒˆ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ !
  • ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋Š” ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ์„ ํ•ด๋‘๊ณ  ํ•„์š”ํ•  ๋•Œ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“” ๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) ๊ตฌํ˜„

# ํ”ผ๋ณด: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
# ํ”ผ๋ณด๋ฅผ ๋ถ„ํ• ์ •๋ณต์œผ๋กœ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•
import time


def fibo1(x):
    if x == 1:
        return 1
    if x == 2:
        return 1

    return fibo1(x - 2) + fibo1(x - 1)


start = time.time()
print(fibo1(37))
end = time.time()
print(f'๋ถ„ํ• ์ •๋ณต: {end - start}')

# ํ”ผ๋ณด๋ฅผ DP๋กœ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•
dp = [0] * 100


def fibo2(x):
    if x == 1:
        return 1
    if x == 2:
        return 1
    if dp[x] != 0:
        return dp[x]
    dp[x] = fibo2(x - 2) + fibo2(x - 1)
    return dp[x]


start = time.time()
print(fibo2(37))
end = time.time()
print(f'๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ: {end - start}')

'''
24157817
๋ถ„ํ• ์ •๋ณต: 6.408001184463501
24157817
๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ: 0.0
'''

 

๐Ÿ“” ๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) ํŠน์ง•

  • ๋ณดํ†ต ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€ ๋•Œ ํ’€์ด๊ฐ€ ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด ์นœ๊ตฌ๋ฅผ ๋– ์˜ฌ๋ฆฌ์ž.
๋ฐ˜์‘ํ˜•