[DP] ํŒŒ์ด์ฌ์œผ๋กœ Dynamic Programming ์ •๋ณตํ•˜๊ธฐ

2025. 7. 13. 16:40ยท๐Ÿ“š ๋ฐฑ์ค€
728x90
๋ฐ˜์‘ํ˜•

์ฝ”ํ…Œ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค ๋ณด๋ฉด, ์ž์ฃผ ๋‚˜์˜ค๋Š” ๊ฐœ๋…์ธ Dynamic Programming์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.

DP๋Š” ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ ์„œ ํ‘ธ๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋‹จ์ˆœํžˆ ์ชผ๊ฐœ๋Š” ๊ฒƒ ๋ฟ ์•„๋‹ˆ๋ผ ์ด๋ฏธ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ด์„œ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ์ˆ˜๊ณ ๋ฅผ ๋œ์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์ฆ‰, ๋ฐ˜๋ณต๋˜๋Š” ๊ณ„์‚ฐ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด, ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅ(memoization ๋˜๋Š” tabulation) ํ•ด๋‘๊ณ  ์žฌํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

๐ŸŒฑ DP๋Š” ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

์•„๋ž˜ ๋‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

1. ๊ฒน์น˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ : ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ

2. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ : ํฐ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๊ฐ€ ์ž‘์€ ๋ฌธ์ œ๋“ค์˜ ์ตœ์ ํ•ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ตฌ์กฐ

๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๐ŸŒฑ DP ์‚ฌ์šฉ ๋ฐฉ์‹์€?

DP๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋ฒ•์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

1. Top-down ๋ฐฉ์‹ (์žฌ๊ท€ + Memoization)

  • ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์œ„์—์„œ๋ถ€ํ„ฐ ๋‚ด๋ ค์˜ค๋ฉด์„œ ๊ณ„์‚ฐํ•˜๊ณ , ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์ฃผ๋กœ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด!

2. Bottom-up ๋ฐฉ์‹ (๋ฐ˜๋ณต๋ฌธ + Tabulation)

  • ์ด๋ฆ„๋Œ€๋กœ ์•„๋ž˜์—์„œ๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ๊ณ„์‚ฐํ•ด์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ฃผ๋กœ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

 

๐ŸŒฑ DP๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ œ ์˜ˆ์‹œ๋“ค

 

  • ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
  • ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
  • ๊ฒฝ๋กœ์˜ ์ˆ˜, ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
  • ๋ฐฐ๋‚ญ ๋ฌธ์ œ(0/1 Knapsack), ๋™์ „ ๊ตํ™˜ ๋ฌธ์ œ ๋“ฑ
  • ์ •์ˆ˜ ๋ถ„ํ•  ๋ฌธ์ œ

 

๐ŸŒฑ ์ •์ˆ˜ ๋ถ„ํ• (Partition Problem) ๋ฌธ์ œ ํ’€์ด - ์ˆœ์„œ๊ณ ๋ คX

๊ทธ ์ค‘, ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ ๊ฐ€์žฅ ๋งŽ์ด ์ฃผ์ €ํ–ˆ๋˜ ์œ ํ˜•์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ •์ˆ˜ ๋ถ„ํ• ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์ด๋‹ค.

์–‘์˜ ์ •์ˆ˜๋“ค์˜ ์กฐํ•ฉ ์ค‘์—์„œ, ๊ทธ ํ•ฉ์ด ์ •์ˆ˜ n์ด ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

 

์˜ˆ๋ฅผ ๋“ค์–ด, n = 4์ผ ๋•Œ, ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ(์ˆœ์„œ๋ฅผ ๋ฌด์‹œ)์€:

  • 1 + 1 + 1 + 1
  • 1 + 1 + 2
  • 2 + 2
  • 1 + 3
  • 4

→ ์ด 5๊ฐ€์ง€

 

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” DP๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž.

def count_combinations(n):
    dp = [0] * (n + 1)
    dp[0] = 1  # ํ•ฉ์ด 0์ด ๋˜๋Š” ๋ฐฉ๋ฒ•์€ '์•„๋ฌด๊ฒƒ๋„ ์„ ํƒํ•˜์ง€ ์•Š๋Š” 1๊ฐ€์ง€'๋ฟ

    # 1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์กฐํ•ฉ์„ ๋งŒ๋“ฆ
    for num in range(1, n + 1):
        for i in range(num, n + 1):
            dp[i] += dp[i - num]

    return dp[n]

 

 

  • dp[i]๋Š” "ํ•ฉ์ด i๊ฐ€ ๋˜๋Š” ์กฐํ•ฉ์˜ ์ˆ˜"๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์ฒ˜์Œ์—” dp[0] = 1 → ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ์จ์„œ 0์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ ํ•œ ๊ฐ€์ง€.
  • ๊ทธ ๋‹ค์Œ, ์ˆซ์ž 1๋ถ€ํ„ฐ n๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ, ๊ฐ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํ•ฉ๋“ค์„ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.
  • ์ด๋•Œ๋Š” ์ค‘๋ณต ์กฐํ•ฉ์€ ํ—ˆ์šฉํ•˜์ง€๋งŒ ์ˆœ์„œ๋Š” ๋ฌด์‹œ.

 

๐ŸŒฑ ์ •์ˆ˜ ๋ถ„ํ• (Partition Problem) ๋ฌธ์ œ ํ’€์ด - ์ˆœ์„œ๊ณ ๋ คO

์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Permutation(์ˆœ์—ด) ๋ฌธ์ œ์ด๋‹ค.

def count_permutations(n):
    dp = [0] * (n + 1)
    dp[0] = 1  # base case

    for i in range(1, n + 1):
        for num in range(1, n + 1):
            if i - num >= 0:
                dp[i] += dp[i - num]

    return dp[n]

 

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ“š ๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] : ์—ฐ์† ๋ถ€๋ถ„ ์ˆ˜์—ด ํ•ฉ์˜ ๊ฐœ์ˆ˜  (3) 2025.07.14
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] : ๋ฉ€๋ฆฌ๋›ฐ๊ธฐ  (0) 2025.07.13
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค : ๊ทค ๊ณ ๋ฅด๊ธฐ  (0) 2025.06.28
๋ฐฑ์ค€ 17219: ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ  (0) 2025.05.13
๋ฐฑ์ค€ 10989: ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ 3  (0) 2025.05.13
'๐Ÿ“š ๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] : ์—ฐ์† ๋ถ€๋ถ„ ์ˆ˜์—ด ํ•ฉ์˜ ๊ฐœ์ˆ˜
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] : ๋ฉ€๋ฆฌ๋›ฐ๊ธฐ
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค : ๊ทค ๊ณ ๋ฅด๊ธฐ
  • ๋ฐฑ์ค€ 17219: ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ
coram22
coram22
  • coram22
    ram2 ๐Ÿš—
    coram22
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (86)
      • ๐Ÿ’ง flutter (22)
      • ๐ŸŽ iOS (18)
      • ๐Ÿฉต CosPro (4)
        • python 2๊ธ‰ (4)
      • ๐Ÿˆ‍โฌ› git (3)
      • ๐Ÿ–ฅ๏ธ react (6)
      • ๐Ÿพ OS (1)
      • ๐Ÿ›œ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ (6)
      • ๐ŸŒƒ computer vision (6)
      • ๐Ÿ“š ๋ฐฑ์ค€ (11)
      • ๐Ÿฃ My Story (1)
      • ๐Ÿ’ป else (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๐Ÿˆโ€โฌ› github ๐Ÿˆโ€โฌ›
    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • ๐Ÿฑ Github ๐Ÿฑ
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    Swift
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    Python
    React
    IOS
    Xcode
    UIKit
    ์˜ค๋ธ”์™„
    ์ •๋‹ต
    Computer Vision
    Git
    ์ค‘๋„ํœดํ•™
    SwiftUI
    ์ปด๋„ค
    dart
    2๊ธ‰
    ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
    FLUTTER
    OpenCV
    ๊ณต์‹๋ฌธ์„œ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
coram22
[DP] ํŒŒ์ด์ฌ์œผ๋กœ Dynamic Programming ์ •๋ณตํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”