분할정복이란 문제를 모두 부분 문제로 나눠서 해결하는 알고리즘이다.
문제들이 충분히 나누어졌다고 생각할 때까지 문제를 작게 나눈다.
분할 정복의 3단계
- Divide: 주어진 문제를 반으로 나누어 두 개의 부분 문제로 나누기
- Conquer: 두 부분 문제를 재귀적으로 구하기
- Combine: 계산한 두 부분 문제의 답을 더하기
def consecutive_sum(start, end):
# n과 n이 같은 경우
if end == start:
return start
# 부분 문제를 반으로 나누기 위해 문제의 정중앙을 정의
mid = (start + end) // 2
# 각 부분 문제를 재귀적으로 풀고(Conquer), 부분 문제의 답을 서로 더함(Combine)
return consecutive_sum(start, mid) + consecutive_sum(mid + 1, end)
# 테스트 코드
print(consecutive_sum(1, 100))
ex. 1부터 100까지 합을 구한다고 가정
- Divide: 1~50까지의 합을 구하는 부분 문제, 51~100까지의 합을 구하는 부분 문제로 나누기
- Conquer: 1~50까지의 합을 구하고, 51~100까지의 합 구하기 (각 부분문제 해결)
- Combine: 두 계산 결과를 합하기
반응형
'Programming Language > Python3.6' 카테고리의 다른 글
[python 파이썬] 백준 <1. 입출력과 사칙연산> 1~5번 2557번, 1000번, 1001번, 10998번, 1008번 코드 (0) | 2024.04.14 |
---|---|
[Python 파이썬] 피보나치 수열 구현하기 (공간 최적화) (0) | 2024.01.26 |
[Python 파이썬] 두 리스트 원소들 중에 두 원소를 곱한 값이 최대가 되는 경우 구하기 (1) | 2024.01.26 |
모두의 알고리즘 with 파이썬 (컴퓨팅 사고를 위한 기초 알고리즘) - 문제 18 (0) | 2022.08.05 |
모두의 알고리즘 with 파이썬 (컴퓨팅 사고를 위한 기초 알고리즘) - 문제 17 (0) | 2022.08.05 |