LeetCode/Top Interview 150

88. Merge Sorted Array

hyunkookim 2024. 11. 25. 16:52

88. Merge Sorted Array

 

https://youtu.be/P1Ic85RarKY?si=bOPe6rAYv_eZp-R4

 

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        # last index nums1
        # nums1의 마지막 인덱스를 설정 (m개의 요소 + n개의 요소가 합쳐질 공간)
        last_idx = m + n - 1

        # merge in reverse order
        # nums1과 nums2를 역순으로 병합
        while m > 0 and n > 0:
            if nums1[m-1] > nums2[n-1]:  # nums1의 마지막 값이 nums2의 마지막 값보다 큰 경우
                nums1[last_idx] = nums1[m-1]  # nums1의 값을 nums1의 끝부분에 배치
                m -= 1  # nums1의 비교 인덱스를 하나 줄임
            else:  # nums1[m-1] <= nums2[n-1]
                nums1[last_idx] = nums2[n-1]  # nums2의 값을 nums1의 끝부분에 배치
                n -= 1  # nums2의 비교 인덱스를 하나 줄임
            last_idx -= 1  # 병합된 공간의 인덱스를 하나 줄임

        # fill nums1 with leftover nums2 elements
        # nums2에 남은 값들을 nums1에 채움 (nums1에 남은 값들은 이미 정렬된 상태라 추가 작업 불필요)
        while n > 0:
            nums1[last_idx] = nums2[n-1]  # nums2의 남은 값을 nums1에 추가
            n, last_idx = n - 1, last_idx - 1  # nums2 인덱스와 병합 공간 인덱스를 하나씩 줄임