가수면

동적 계획법 본문

CS/CS

동적 계획법

니비앙 2023. 11. 9. 18:51

상향식 접근법으로, 가장 최하위 해답을 구한 후, 이를 저장하고, 해당 결과값을 이용해서 상위 문제를 풀어가는 방식Memoization 기법을 사용함

모든 경우의 수를 완전 탐색할 때 사용

하위의 문제들이 중복되어 재활용되는 특징이 있음

 

대표 예시 - 피보나치 수열

def fibo_dp(num):
    cache = [ 0 for index in range(num + 1)]
    cache[0] = 0
    cache[1] = 1
    
    for index in range(2, num + 1):
        cache[index] = cache[index - 1] + cache[index - 2]
    return cache[num]

 

문제

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

(1 ≤ n ≤ 1,000)

 

정리

1. 입력값만큼 빈리스트 만들기

2. 초깃값 만들기 (할당한 값을 재사용하는 동적 계획법의 특징)

3. 반복문으로 계산되는 로직 만들기

n = int(input())
dp = [0] * 1001
dp[1] = 1
dp[2] = 2

for index in range(3, 1001):
    dp[index] = dp[index - 1] + dp[index - 2]
    
print (dp[n] % 10007)

 

'CS > CS' 카테고리의 다른 글

이진 탐색, 순차 탐색  (0) 2023.11.10
퀵 정렬 알고리즘  (0) 2023.11.09
선택 정렬 알고리즘  (0) 2023.11.09
삽입 정렬 알고리즘  (0) 2023.11.09
버블 정렬 알고리즘  (0) 2023.11.09
Comments