다이나믹 프로그래밍(Dynamic Programming, DP)은 큰 문제를 작은 부분 문제로 나누어 해결하는 알고리즘 기법입니다. 이 때, 작은 부분 문제의 해결 결과를 저장하고 활용하여 중복 계산을 피하며 문제를 효율적으로 해결합니다. DP는 최적 부분 구조와 중복 부분 문제의 성질을 가지는 문제에서 효과적으로 사용됩니다.
DP의 주요 특징:
DP의 활용 예시:
파이썬 코드를 통해 DP를 예시로 살펴보겠습니다. 다음은 피보나치 수열을 메모이제이션을 활용하여 계산하는 DP 코드입니다.
def fibonacci(n, memo={}):
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)
return memo[n]
n = 10
result = fibonacci(n)
print(f"{n}번째 피보나치 수:", result)
이 코드는 메모이제이션을 활용하여 피보나치 수열을 계산하는 예시입니다. 작은 부분 문제의 해결 결과를 저장하고 필요할 때마다 사용하여 중복 계산을 피합니다.