수 많은 우문은 현답을 만든다

Merge Sorted Array 본문

카테고리 없음

Merge Sorted Array

aiden.jo 2024. 2. 28. 23:58

안녕하세요, 오늘은 Leet Code의 88번 문제를 풀어보겠습니다.

 

문제 링크


문제 내용
You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively. Merge nums1 and nums2 into a single array sorted in non-decreasing order.

Example 1:
Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
Explanation: The arrays we are merging are [1,2,3] and [2,5,6].
The result of the merge is [1,2,2,3,5,6] with the underlined elements coming from nums1.

 

Example 2:
Input: nums1 = [1], m = 1, nums2 = [], n = 0
Output: [1]
Explanation: The arrays we are merging are [1] and [].
The result of the merge is [1].

 

Example 3:
Input: nums1 = [0], m = 0, nums2 = [1], n = 1
Output: [1]
Explanation: The arrays we are merging are [] and [1].
The result of the merge is [1].
Note that because m = 0, there are no elements in nums1. The 0 is only there to ensure the merge result can fit in nums1.

 


문제 접근

코딩테스트 문제는 쉽게 접근하는게 좋다.

우리 머리 속에는 2중 포문을 돌리면서 복잡하게 사이사이에 껴넣는 방법이 먼저 생각 날 것이다.

하지만 가능한 시간 복잡도를 줄이면서 간단하게 풀 수 있는 방법을 생각해보고 시작하자.

 

문제 풀이

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.
        """
  • 아무것도 리턴하지 말고 nums1을 직접 수정하라고 한다.
    (사실 프로그램을 짤때는 이렇게 직접 수정하는 것은 지양해야한다...)

 

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        
        idx = 0
        for i in range(m, len(nums1)):
            nums1[i] = nums2[idx]
            idx += 1

        print(nums1)
  • nums1의 m번째부터 0이 붙는 것으로 보인다
  • 그 뒤에 nums2를 붙이면 어떻게 될까?
  • 결과는 [1, 2, 3, 2, 5, 6]

문제 해결

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        
        idx = 0
        for i in range(m, len(nums1)):
            nums1[i] = nums2[idx]
            idx += 1
        
        nums1.sort(reverse = False)

 

  • 결과는 [1,2,2,3,5,6]. 정답이다.
  • 이 문제는 복잡하게 원소 하나씩 찾아서 정렬하려면 시간이 오래 걸린다.

 

끝!