๐Ÿ™Œ DP(Dynamic Programming)์™€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)

: ) YOUNGยท2023๋…„ 9์›” 1์ผ
1

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
250/411
post-thumbnail

๐ŸงฎDP(Dynamic Programming)

  • ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ทธ ํ•ด๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์›๋ž˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค.

๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ(sub-problems)๋กœ ๋‚˜๋ˆ„์–ด ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ์ €์žฅํ•˜์—ฌ, ๊ฐ™์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‚˜ํƒ€๋‚  ๋•Œ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ์ €์žฅ๋œ ๊ฐ’์„ ์žฌํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)O(n)

  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(1)O(1)


ํƒ‘-๋‹ค์šด (Top-Down)

์žฌ๊ท€๋กœ ๊ตฌํ˜„, "๊ธฐ์ € ์กฐ๊ฑด(Base Case)" ํ•„์ˆ˜


  1. ์ฝ”๋“œ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›€: ์žฌ๊ท€์ ์ธ ๊ตฌ์กฐ๋Š” ๋ฌธ์ œ๋ฅผ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ˜•ํƒœ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ๊ฐœ๋ฐœ ์†๋„ ๋น ๋ฆ„: ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ๋ฌธ์ œ๋„ ๋น„๊ต์  ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ: ์žฌ๊ท€ ํ˜ธ์ถœ์—๋Š” ์ผ์ •ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ์ธํ•ด ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  5. ๋”ฐ๋กœ ์ตœ์ ํ™” ํ•„์š”: ๊ผฌ๋ฆฌ ์žฌ๊ท€ ๋“ฑ์„ ํ™œ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์˜ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.


๋ฐ”ํ…€-์—… (Bottom-Up)

๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„


  1. ํšจ์œจ์„ฑ: ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†๊ณ , ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”: ํ•„์š”ํ•œ ๋งŒํผ์˜ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์ด ๋†’์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์ฝ”๋“œ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›€: ๋ฌธ์ œ๋ฅผ ๋น„์žฌ๊ท€์ ์œผ๋กœ ํ’€์–ด์•ผ ํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ์˜ ์ดํ•ด๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ๊ฐœ๋ฐœ ์†๋„ ๋Š๋ฆผ: ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋Š๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.




๐Ÿ“๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)

  • ๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ…Œํฌ๋‹‰ ์ค‘ ํ•˜๋‚˜๋กœ, ์ด๋ฏธ ๊ณ„์‚ฐํ•œ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ์ €์žฅํ•ด๋‘๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ์ด๋ฏธ ๊ณ„์‚ฐํ•œ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ์ €์žฅํ•ด๋‘๋Š” ํ…Œํฌ๋‹‰์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋™์ผํ•œ ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ๋‹ค์‹œ ๋‚˜ํƒ€๋‚ฌ์„ ๋•Œ, ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ํ”ผํ•˜๊ณ  ์ €์žฅ๋œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‹œ๊ฐ„๋ณต์žก๋„ : O(2n)O(2^n)

  • ๊ณต๊ฐ„๋ณต์žก๋„ : O(n)O(n)




๐Ÿฅ• DP(Dynamic Programming)์™€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)์˜ ๊ด€๊ณ„

๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming, DP)๊ณผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)์€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ์ง€๋งŒ, ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ™์€ ๊ฐœ๋…์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ผ์ข…์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€