๐Ÿ“š ๋™์  ํ”„๋กœ๊ทธ๋ ˆ๋ฐ (Dynamic Programing) ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Dynamic Programing) ์ด๋ž€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ํšจ์œจ์„ฑ์„ ๋น„์•ฝ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•.

  • ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ(์ž‘์€ ๋ฌธ์ œ)๋Š” ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ €์žฅํ•˜์—ฌ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋„๋ก ํ•จ.
  • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ตฌํ˜„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹(ํƒ‘๋‹ค์šด๊ณผ ๋ณดํ…€์—…)์œผ๋กœ ๊ตฌ์„ฑ.
  • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋™์  ๊ณ„ํš๋ฒ•์ด๋ผ๊ณ ๋„ ๋ถ€๋ฆ„.
  • DP๋Š” ๋‹ค์Œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ (Optimal Substructure)
      • ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚œ๋ฃจ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž‘์€ ๋ฌธ์ œ์˜ ๋‹ต์€ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ (Overlapping Subproblem)
      • ๋™์ผํ•œ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.

๋™์ (Dynamic)์ด๋ž€

  • ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋™์  ํ• ๋‹น(Dynamic Allocation)์€ โ€˜ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘์— ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋ฒ•โ€™์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค
  • ๋ฐ˜๋ฉด์— ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ โ€˜๋‹ค์ด๋‚˜๋ฏนโ€™์€ ๋ณ„๋‹ค๋ฅธ ์˜๋ฏธ ์—†์ด ์‚ฌ์šฉ๋œ ๋‹จ์–ด์ด๋‹ค

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด ์žˆ๋‹ค.

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด

  • ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด๋ž€ ์ด์ „ ๋‘ํ•ญ์˜ ํ•ฉ์„ ํ˜„์žฌ์˜ ํ•ญ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ํŠน์ง•์ด ์žˆ๋Š” ์ˆ˜์—ด์ด๋‹ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋์—†์ด ์ด์–ด์ง„๋‹ค.
  • ์ ํ™”์‹์„ ์‚ฌ์šฉํ•ด ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ ์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • a(n) = a(n-1) + a(n-2)
      • n ๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ = (n-1)๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ + (n-2)๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜
    • a(1) = 1, a(2) = 2
      • ๋‹จ, 1๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ = 1, 2๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ = 1

ํ”ผ๋ณด๋‚˜์น˜

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ˆ˜์—ด์„ ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ˆ˜ํ•™์  ์ ํ™”์‹์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ ค๋ฉด ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๋‹ค.
# ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜๋ฅผ ๋‹จ์ˆœ ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ํ‘œํ˜„
def fibo(x):
	if x==1 or x==2:
    	return 1
    return fibo(x-1) + fibo(x-2)
print(fibo(4))

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ ์‹œ๊ฐ„๋ณต์žก๋„ ๋ถ„์„

ํ”ผ๋ณด๋‚˜์น˜

  • f(n)์—์„œ n์ด ์ปค์งˆ์ˆ˜๋ก ํ˜ธ์ถœ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฏ€๋กœ ์ข‹์ง€์•Š์€ ์ฝ”๋“œ์ด๋‹ค.
  • ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Œ.
    • ์„ธํƒ€ ํ‘œ๊ธฐ๋ฒ•: ๐œƒ(1.618โ‹ฏแดบ)
    • ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•: O(2แดบ)
  • ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์„ ๊ธฐ์ค€์œผ๋กœ f(30)์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ 10์–ต๊ฐ€๋Ÿ‰์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ.

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ํšจ์œจ์ ์ธ ํ•ด๋ฒ•: DP

  • ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ DP๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
    2. ์ž‘์€ ๋ฌธ์ œ์—์„œ ๊ตฌํ•œ ์ •๋‹ต์€ ๊ทธ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ํฐ ๋ฌธ์ œ์—์„œ๋„ ๋™์ผํ•˜๋‹ค.
  • ๋ฉ”๋ชจ์ œ์ด์…˜ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•œ ์ข…๋ฅ˜.
    • ํ•œ ๋ฒˆ ๊ตฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ฉ”๋ชจํ•˜๋Š” ๊ธฐ๋ฒ•.
      • ๊ฐ™์€ ์‹์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ”๋ชจํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋ฒ•.
      • ๊ฐ’์„ ๊ธฐ๋กํ•ด ๋†“๋Š”๋‹ค๋Š” ์ ์—์„œ ์บ์‹ฑ(Cashing)์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
    • ๊ตฌํ˜„์€ ๋‹จ์ˆœํ•˜๊ฒŒ ํ•œ๋ฒˆ ๊ตฌํ•œ ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํƒ‘๋‹ค์šด VS ๋ณดํ…€์—…

  • ํƒ‘๋‹ค์šด(๋ฉ”๋ชจ์ œ์ด์…˜) ๋ฐฉ์‹์€ ํ•˜ํ–ฅ์‹์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋ณดํ…€์—… ๋ฐฉ์‹์€ ์ƒํ–ฅ์‹์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • DP์˜ ์ „ํ˜•์ ์ธ ํ˜•ํƒœ๋Š” ๋ณดํ…€์—… ๋ฐฉ์‹์ด๋‹ค.
    • ๊ฒฐ๊ณผ ์ €์žฅ์šฉ ๋ฆฌ์ŠคํŠธ๋Š” DP ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ๋ฉ”๋ชจ์ œ์ด์…˜์€ ์ด์ „์— ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๊ธฐ๋กํ•ด ๋†“์€ ๋„“์€ ๊ฐœ๋…์„ ์˜๋ฏธํ•œ๋‹ค.
    • ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ์ œ์ด์…˜์€ DP์— ๊ตญํ•œ๋œ ๊ฐœ๋…์ด ์•„๋‹ˆ๋‹ค.
    • ํ•œ ๋ฒˆ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์•„ ๋†“๊ธฐ๋งŒ ํ•˜๊ณ  DP๋ฅผ ์œ„ํ•ด ํ™œ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.
# ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด: ํƒ‘๋‹ค์šด DP ์†Œ์Šค์ฝ”๋“œ
# ํ•œ ๋ฒˆ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)ํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
d = [0] * 100
# ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜(Fibonacci Function)๋ฅผ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„(ํƒ‘๋‹ค์šด DP)
def fibo(x):
    # ์ข…๋ฃŒ ์กฐ๊ฑด(1 ํ˜น์€ 2์ผ ๋•Œ 1์„ ๋ฐ˜ํ™˜)
    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]
print(fibo(99))
>>> 218922995834555169026
# ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด: ๋ณดํ…€์—… DP ์†Œ์Šค์ฝ”๋“œ
# ์•ž์„œ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ DP ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
d = [0] * 100
# ์ฒซ๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์™€ ๋‘๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 1
d[1] = 1
d[2] = 2
n = 99
# ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜(Fibonacci Function) ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„(๋ณดํ…€์—… DP)
for i in range(3, n + 1):
    d[i] = d[i - 1] + d[i - 2]
print(d[n])
>>> 218922995834555169026

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด: ๋ฉ”๋ชจ์ œ์ด์…˜ ๋™์ž‘ ๋ถ„์„

์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ‰์น ๋œ ๋…ธ๋“œ๋งŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์„ ๊ธฐ๋Œ€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”ผ๋ณด๋‚˜์น˜

์‹ค์ œ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋Š” ์ƒ‰์น ๋œ ํ•จ์ˆ˜๋งŒ ํ˜ธ์ถœ๋œ๋‹ค.

ํ”ผ๋ณด๋‚˜์น˜

  • ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)

ํ”ผ๋ณด๋‚˜์น˜ ์†Œ์Šค์ฝ”๋“œ(ํƒ‘๋‹ค์šด)

  • ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ
d = [0] * 100
def fibo(x):
    print('f(' + str(x) + ')', end=' ')
    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]
fibo(6)
>>>> f(6) f(5) f(4) f(3) f(2) f(1) f(2) f(3) f(4)

ํ”ผ๋ณด๋‚˜์น˜ ์†Œ์Šค์ฝ”๋“œ(๋ณดํ…€์—…)

  • ๋™์ผํ•œ ์›๋ฆฌ๋ฅผ ์ ์šฉํ•˜๋˜ ๋‹จ์ˆœํžˆ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ
# ์•ž์„œ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ DP ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
d = [0] * 100
# ์ฒซ ๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์™€ ๋‘ ๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 1
d[1] = 1
d[2] = 1
n = 99
# ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„(bottom-up)
for i in range(3, n+1):
    d[i] = d[i-1] + d[i-2]
print(d[n])

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

  • ์ด๋Ÿฌํ•œ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์€ ํ€ต ์ •๋ ฌ์—์„œ๋„ ์†Œ๊ฐœ๋œ ์ ์ด ์žˆ๋‹ค.
    • ํ€ต ์ •๋ ฌ์€ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ •๋ ฌํ•  ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ถ„ํ• ํ•˜์—ฌ ์ „์ฒด์ ์œผ๋กœ ์ •๋ ฌ์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ด๋Š” ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. ->ํ€ต์ •๋ ฌ ๋ถ„ํ• ์ •๋ณต
  • DP์™€ ๋ถ„ํ•  ์ •๋ณต์€ ๋ชจ๋‘ ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž‘์€ ๋ฌธ์ œ์˜ ๋‹ต์„ ๋ชจ์•„์„œ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ
  • DP์™€ ๋ถ„ํ•  ์ •๋ณต์˜ ์ฐจ์ด์ ์€ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ค‘๋ณต์ด๋‹ค.
    • DP ๋ฌธ์ œ์—์„œ๋Š” ๊ฐ ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์ด ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ์ค‘๋ณต๋œ๋‹ค.
    • ๋ถ„ํ•  ์ •๋ณต ๋ฌธ์ œ์—์„œ๋Š” ๋™์ผํ•œ ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ„์‚ฐ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๊ฐ€์žฅ ๋จผ์ € ๊ทธ๋ฆฌ๋””, ๊ตฌํ˜„ ์™„์ „ ํƒ์ƒ‰ ๋“ฑ์˜ ์•„์ด๋””์–ด๋กœ ๊ฐ€๋Šฅํ•œ์ง€ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์ด ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์œผ๋ฉด DP๋ฅผ ๊ณ ๋ คํ•œ๋‹ค.
  • ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ๋น„ํšจ์œจ์ ์ธ ์™„์ „ ํƒ์ƒ‰ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ ๋’ค์— (ํƒ‘๋‹ค์šด) ์ž‘์€ ๋ฌธ์ œ์—์„œ ๊ตฌํ•œ ๋‹ต์ด ํฐ ๋ฌธ์ œ์—์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉด, ์ฆ‰ ๋ฉ”๋ชจ์ œ์ด์…˜์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ํƒ‘๋‹ค์šด ๋ฐฉ์‹ ๋ณด๋‹ค๋Š” ๋ฐ˜๋ณต์„ ์ด์šฉํ•œ ๋ณดํ…€์—… ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š”๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.
    • ์‹œ์Šคํ…œ์ƒ ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ์Šคํƒ ํฌ๊ธฐ๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ.
  • ์ผ๋ฐ˜์ ์ธ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ˆ˜์ค€์—์„œ๋Š” ๊ธฐ๋ณธ ์œ ํ˜•์˜ DP๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ