본문 바로가기

카테고리 없음

모듈화

병합 정렬 알고리즘을 모듈화하여 구현하고, 이를 테스트하는 방법을 설명하겠습니다. 이를 통해 분할 정복 알고리즘의 원리를 파이썬에서 어떻게 모듈화하고, 테스트하는지 살펴보겠습니다.

병합 정렬 모듈

우선 병합 정렬 알고리즘을 모듈로 분리합니다.

merge_sort.py

python
코드 복사
def merge_sort(arr): if len(arr) <= 1: return arr 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): sorted_array = [] left_index, right_index = 0, 0 while left_index < len(left) and right_index < len(right): if left[left_index] < right[right_index]: sorted_array.append(left[left_index]) left_index += 1 else: sorted_array.append(right[right_index]) right_index += 1 sorted_array.extend(left[left_index:]) sorted_array.extend(right[right_index:]) return sorted_array

테스트 모듈

테스트 코드를 별도의 모듈로 분리하여, 병합 정렬 함수들을 테스트합니다.

test_merge_sort.py

python
코드 복사
import unittest from merge_sort import merge_sort class TestMergeSort(unittest.TestCase): def test_merge_sort(self): test_cases = [ { "input": [38, 27, 43, 3, 9, 82, 10], "expected": [3, 9, 10, 27, 38, 43, 82] }, { "input": [5, 2, 9, 1, 5, 6], "expected": [1, 2, 5, 5, 6, 9] }, { "input": [0], "expected": [0] }, { "input": [], "expected": [] } ] for case in test_cases: input_data = case["input"] expected_output = case["expected"] result = merge_sort(input_data) self.assertEqual(result, expected_output, f"Failed for input: {input_data}") if __name__ == "__main__": unittest.main()

설명

  1. merge_sort.py:
    • merge_sort 함수와 merge 함수를 정의하여 병합 정렬 알고리즘을 구현합니다.
    • 이 파일은 병합 정렬 알고리즘의 핵심 로직을 포함하는 모듈입니다.
  2. test_merge_sort.py:
    • unittest 모듈을 사용하여 테스트 케이스를 작성합니다.
    • test_merge_sort 메서드는 여러 테스트 케이스를 정의하고, 각 테스트 케이스에 대해 merge_sort 함수를 호출하여 결과가 예상과 일치하는지 확인합니다.
    • unittest.main()을 호출하여 테스트를 실행합니다.

실행 방법

터미널에서 다음 명령어를 실행하여 테스트를 수행할 수 있습니다:

sh
코드 복사
python test_merge_sort.py

이 예제는 분할 정복의 원리를 파이썬에서 어떻게 모듈화하고, 테스트하는지 잘 보여줍니다. 병합 정렬은 시간 복잡도가 O(n log n)으로, 안정적인 정렬 알고리즘입니다. 모듈화를 통해 코드를 더 깔끔하게 유지하고, 재사용성과 테스트 가능성을 높일 수 있습니다.