Programming/Python
[파이썬] Divide and Conquer
Hard_Try
2020. 3. 16. 22:28
이 Divide and Conquer는 3단계로 나뉘어 진다.
1. Divide : 문제를 부분 문제로 나눈다.
2. Conquer : 각 부분 문제를 정복한다.
3. Combine : 부분 문제들의 솔루션을 합쳐서 기존 문제를 해결한다.
먼저 첫 번째 Divide
1 ~ 100의 합을 1 ~ 50, 51 ~ 100의 합으로 나눌 수 있다.
두 번째 이 두가지 나눈 것에대한 결과값을 Conquer하여
세 번째 combine해 문제를 풀면된다는 것이다.
예시)
def consecutive_sum(start, end): # base case if start == end: return start # recurcive case else: mid = (start + end) // 2 return consecutive_sum(start, mid) + consecutive_sum(mid + 1, end)
이 함수는 start부터 end숫자까지의 합을 더하는 함수이다. 재귀함수로 보이지만 사실
이 함수는 위에서 본 것과 같이 Divide, Conquer, Combine을 거쳤다.
base case는 계속 둘로 나누는 연산을 반복하니 결국에 start와 end가 같아지는 지점에 도달하면 그 값을 리턴하도록 한다.
그러면 recurcive case는 이러한 값이 리턴될 수 있도록 계속 반으로 쪼개어 둘을 더할 수 있도록 하면된다.
그러면 제대로된 결과값을 얻을 수 있다.