큰 문제를 작은 부분 문제로 나누어 해결

부분 문제의 결과를 저장하여 재사용

중복 계산을 제거하여 효율성 향상

 

피보나치 수열 [재귀 O(2^n)] -> [DP O(n)] 으로 극적인 성능 향상!

 

메모이제이션

- 계산 결과를 memo에 저장

- 같은 값을 다시 계산할 필요 없음

- 캐싱과 유사한 개념

 

DP가 필요한 경우

1. 최적 부분 구조: 부분 문제의 최적해로 전체 최적해 구성

2. 중복 부분 문제: 같은 문제가 반복적으로 등장

 

 

https://leetcode.com/problems/house-robber/description/?envType=study-plan-v2&envId=top-interview-150

 

House Robber - LeetCode

Can you solve this real interview question? House Robber - You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent ho

leetcode.com

 

연속 해서 집을 털 수 없다.

dp 배열을 어떻게 정의 해야 할지가 중요하다

dp[n]= n번째까지 집을 털었을 경우 최대 금액

nums 에 각 집의 소지액을 나타내는 정수 배열이 주어졌다.

 

max( n번째 집을 선택했을 경우, n번째 집을 선택하지 않았을 경우 )

n번째 집을 선택했을 경우) 연속된 n-1번째는 선택하지 못한다. -> nums[n] + dp[n-2]

n번째 집을 선택하지 않았을 경우) n-1번째까지의 최댓값이 된다.

dp[n]= max(dp[n-2] + nums[n], dp[n-1])

'Jungle > Everyday' 카테고리의 다른 글

4/1 수요코딩 리액트(2)  (0) 2026.04.05
3/30 파이썬 비동기 프로그래밍  (0) 2026.03.31
3/21  (0) 2026.03.22
3/18  (0) 2026.03.19
3/17  (0) 2026.03.18

+ Recent posts