분할정복
어떤 문제를 더 이상 쪼갤 수 없을 때까지 분할(Divide)한 후 하위 문제를 해결(Conquer)하고 합치면서(Combine) 문제의 답을 도출하는 알고리즘
병합 정렬

Z
풀어볼 문제
Last updated
어떤 문제를 더 이상 쪼갤 수 없을 때까지 분할(Divide)한 후 하위 문제를 해결(Conquer)하고 합치면서(Combine) 문제의 답을 도출하는 알고리즘

Last updated
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]
left = merge_sort(left) #재귀
right = merge_sort(right) #재귀
return merge(left, right)
def merge(left, right):
result = []
i = 0
j = 0
#차례대로 한 개씩 비교하며 merge 시킨다.
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
while i < len(left):
result.append(left[i])
i += 1
while j < len(right):
result.append(right[j])
j += 1
return result
print(merge_sort(4,3,7,1,2,8,5,6)) #[1,2,3,4,5,6,7,8]import sys
input=sys.stdin.readline
N,R,C=map(int,input().split())
#정답을 저장해둘 배열
turn=0
def divide_and_conquer(x,y,size):
global turn
if y==R and x==C:
print(turn)
exit()
if size==1:
turn+=1
return
if not (y<=R<y+size and x<=C<x+size):
turn+=size*size
return
#4등분씩 방문. 기준은 맨 왼쪽 위
else:
divide_and_conquer(x, y, size//2)
divide_and_conquer(x+size//2, y,size//2)
divide_and_conquer(x, y+size//2, size//2)
divide_and_conquer(x+size//2,y+size//2, size//2)
divide_and_conquer(0, 0, 2**N)