[Algorithm] 분할 정복

2025. 2. 11. 16:03·ALGORITHM
목차
  1. 분할 정복

분할 정복

분할 정복은 직접 해결할 수 있을 정도로 간단한 문제가 될 때까지 문제를 재귀적으로 쪼갠 다음, 그 하위의 결과들을 조합하여 원래 문제의 결과로 만들어 낸다.

  • 분할: 문제를 동일한 유형의 여러 하위 문제로 나눈다.
  • 정복: 가장 작은 단위의 하위 문제를 해결하여 정복한다.
  • 조합: 하위 문제에 대한 결과를 원래 문제에 대한 결과로 조합한다.

분할 정복의 대표적인 알고리즘은 머지 소트(병합 정렬)이 있으며, 유클리드 호제법(최대공약수 알고리즘)도 이에 해당된다.

 

병합 정렬

배열을 절반으로 나누어 각각 정렬한 후 병합하는 방식

def merge_sort(arr):
    if len(arr) <= 1:
        return arr  # 기본 케이스: 길이가 1 이하이면 그대로 반환

    mid = len(arr) // 2  # 배열을 반으로 나눔
    left_half = merge_sort(arr[:mid])  # 왼쪽 부분 정렬
    right_half = merge_sort(arr[mid:])  # 오른쪽 부분 정렬

    return merge(left_half, right_half)  # 정렬된 두 부분을 병합 -> 정복

def merge(left, right):
    result = []
    i = j = 0

    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

    # 남은 요소들 추가
    result.extend(left[i:])
    result.extend(right[j:])

    return result

# 테스트
arr = [38, 27, 43, 3, 9, 82, 10]
sorted_arr = merge_sort(arr)
print("정렬된 배열:", sorted_arr)

유클리드 호제법

큰 수를 작은 수로 나눈 나머지를 활용하여 재귀적으로 최대공약수를 구하는 방식

def gcd(a, b):
    if b == 0:
        return a  # b가 0이면 a가 최대공약수
    return gcd(b, a % b)  # 유클리드 호제법 재귀 호출

# 테스트
a, b = 56, 98
print(f"{a}와 {b}의 최대공약수:", gcd(a, b))

'ALGORITHM' 카테고리의 다른 글

[Algorithm] Kruskal 알고리즘  (0) 2025.02.25
[Dynamic Programming] 0-1 배낭 문제  (0) 2025.02.04
[Algorithm] 비트 마스킹  (1) 2025.01.16
  1. 분할 정복
'ALGORITHM' 카테고리의 다른 글
  • [Algorithm] Kruskal 알고리즘
  • [Dynamic Programming] 0-1 배낭 문제
  • [Algorithm] 비트 마스킹
콘순이
콘순이
개발 보안 관련 스터디 기록장
SECURITY DEVELOPER개발 보안 관련 스터디 기록장
  • 콘순이
    SECURITY DEVELOPER
    콘순이
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (71)
      • BAEKJOON (45)
      • ALGORITHM (4)
      • QUALIFICATIONS (0)
      • PYTHON (1)
      • PROGRAMMERS (6)
      • DEVELOP (12)
        • SPRING (4)
        • ERROR (0)
        • CONCEPT (5)
        • AWS (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    비트 조작
    Python
    solid
    알고리즘
    문자열
    비트 마스킹
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
콘순이
[Algorithm] 분할 정복

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.