1. 분할정복을 활용한 알고리즘

분할정복(Divide and Conquer) 방법

# 주어진 숫자에 대해서 덧셈을 실행하는 경우(문제에 따라 분할하는 정도가 다를 수 있다.)
[1, 2, 3, 4, 5]

# step 1
sum([1,2,3,4,5]) = sum([1]) + sum([2,3,4,5])     # Divide

# step 2
sum([2,3,4,5]) = sum([2]) + sum([3,4,5])         # Divide

# step 3
sum([3,4,5]) = sum([3]) + sum([4,5])             # Divide

# step 4
sum([4,5]) = sum([4]) + sum([5])                 # Divide

# step 5
sum([5]) = 5                                     # Conquer

-> 서브문제 sum([5])에 대한 답이 나왔고, 나머지 서브문제 sum([4]), sum([3]) 등에 대한 문제들도 Conquer를 진행
-> 개별적으로 Conquer 후 Merge
# 재귀 : 1부터 10까지의 합

def func(num):
  if num < 1:
    return 0
  else:
    return num + func(num-1)

func(10)
# 분할정복 : 1부터 10까지의 합

def func(num):
  if num == 1:
      return 1
  if num % 2 == 1:
      return func(num - 1) + num
  else:
      return func(num / 2) * 2 + (num / 2) * (num / 2)

func(10)

2. 퀵정렬과 병합정렬

퀵정렬 Quick Sort