Skip to content

Latest commit

ย 

History

History
98 lines (72 loc) ยท 2.7 KB

File metadata and controls

98 lines (72 loc) ยท 2.7 KB

DP ( Dynamic Programming , ๋™์  ๊ณ„ํš๋ฒ• )

์ „์ฒด ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‹จ์ˆœํ™” ํ•œ ํ›„ ์ ํ™”์‹์œผ๋กœ ๋งŒ๋“ค์–ด ์žฌ๊ท€์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

( ํŠน์ • ๋ฒ”์œ„๊นŒ์ง€์˜ ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ ์ „์˜ ๊ฐ’๋“ค์„ ์ด์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• )


โ—ผ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ : ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด


ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด๊ณผ ๊ฐ™์ด ์ด๋ฏธ ๊ณ„์‚ฐ ํ•œ ๊ฐ’์ธ ๋ฐ ๋ถˆ๊ตฌํ•˜๊ณ  ์žฌ๊ท€๋ฅผ ํ†ตํ•˜์—ฌ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋˜๋ฉด ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ๊ณ„์‚ฐํ•œ ๊ฐ’์€ ์ €์žฅํ•˜์—ฌ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด dp์ด๋‹ค.


โœ” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ์ฝ”๋“œ

int fibonacci(int n)
  {
    if (n<=2)
      return 1;
    else
      return fibo(n-1) + fibo(n-2);
   }

โœ” DP๋กœ ๊ตฌํ˜„ํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด

int fibonacci_data[100] = {0,}; //0์œผ๋กœ ์ดˆ๊ธฐํ™”

int fibonacci(int n)
{
  if (n<=2) 
    return 1;
  if (fibonacci_data[n]==0) //์ฒ˜์Œ ๊ณ„์‚ฐ๋œ ์—ฐ์‚ฐ์ด๋ผ๋ฉด, ๊ทธ ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’ ์ €์žฅ
    fibonacci_data[n] = fibonacci(n-1) + fibonacci(n-2);
  return fibonacci_data[n];
}

์ฒ˜์Œ ๊ณ„์‚ฐ๋œ ์—ฐ์‚ฐ์€ ์ƒˆ๋กœ ์ €์žฅํ•ด๋‘๊ณ , ์ €์žฅํ•ด๋‘” ๋ฐ์ดํ„ฐ๋“ค์„ ๊ฐ€์ง€๊ณ  ์ถ”๊ฐ€ ์—ฐ์‚ฐ ์—†์ด ๊ฐ’์„ ๊ตฌํ•˜๊ฒŒ ๋œ๋‹ค.



โ—ผ ๊ตฌํ˜„ ๋ฐฉ์‹

โœ” top-down


๋ฌธ์ œ๋ฅผ ์œ„์—์„œ ์•„๋ž˜๋กœ ์ง„ํ–‰ํ•˜๋ฉฐ ํ‘ธ๋Š” ๋ฐฉ์‹

int fibonacci_data[100] = {0,}; //0์œผ๋กœ ์ดˆ๊ธฐํ™”

int fibonacci(int n)
{
  if (n<=2) 
    return 1;
  if (fibonacci_data[n]==0) //์ฒ˜์Œ ๊ณ„์‚ฐ๋œ ์—ฐ์‚ฐ์ด๋ผ๋ฉด, ๊ทธ ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’ ์ €์žฅ
    fibonacci_data[n] = fibonacci(n-1) + fibonacci(n-2);
  return fibonacci_data[n];
}

์œ„์—์„œ ๋ณด์—ฌ๋“œ๋ฆฐ ์ฝ”๋“œ์™€ ๊ฐ™์ด ๊ฐ’์„ ๋ฉ”๋ชจํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๊บผ๋‚ด์–ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹.


๋ฉ”๋ชจ์ œ๋„ค์ด์…˜

๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ํ•œ ๋ฒˆ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ์ค„์ด๋Š” ๊ฒƒ์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)์ด๋ผ๊ณ  ํ•œ๋‹ค.


โœ” bottom-up


๋ฌธ์ œ ํ’€์ด๋ฅผ ์•„๋ž˜์—์„œ๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์ €์žฅํ•ด ๋‚˜๊ฐ€๋ฉฐ ํ‘ธ๋Š” ๋ฐฉ์‹ ( ์ƒํ–ฅ์‹ ๊ณ„์‚ฐ๋ฒ• )

int fibonacci_data[100];

int fibonacci(int n)
{
  fibonacci_data[0] = 0;
  fibonacci_data[1] = 1;
  for (int i=2; i<=n; i++){
    fibonacci_data[i] = fibonacci_data[i - 1] + fibonacci_data[i - 2];
  }
  return fibonacci_data[n];
}

top-down๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ํ™•์ธํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ชฉํ‘œํ•˜๋Š” n๊นŒ์ง€ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์ดˆ๊ธฐ ๊ฐ’ ๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„๊ฐ€๋ฉฐ ํ‘ธ๋Š” ๋ฐฉ์‹์ด๋‹ค.