알고리즘

Divide and Conquer

아몬드바 2023. 8. 4. 22:51
728x90

문제를 풀기에 너무 크다고 가정을 했을때 문제를 나누어서 푸는것을 말한다.

기존의 문제를 나누어 부분 문제로 나누어 각 부분문제를 풀어 기존의 문제를 해결하는것을 말함.

 

 * Divide : 문제를 부분 문제로 나눔

   Conquer : 각 부분 문제를 정복

   Combine : 부분 문제들의 해결책을 합쳐 기존 문제를 해결

 

구성요소

1. Divide

2. Conquer

   - 해당 단계에서 문제가 너무 크다면 위와 같은 과정을 반복

   1. Divide

   2. Conquer

       1. Divide

       2. Conquer

       3. Combine

             .....

   3. Combine

3. Combine

 

def consecutive_sum(start, end):        
    if end == start:
        return start

    # 문제를 부분문제로 나눈다
    mid = (start + end) // 2

    # 각 부분 문제를 재귀적으로 풀고(Conquer), 부분 문제의 답을 서로 더한다(Combine).
    return consecutive_sum(start, mid) + consecutive_sum(mid + 1, end)

 

 

 

728x90