업데이트:

1 분 소요

링크

https://leetcode.com/problems/merge-sorted-array/?envType=study-plan-v2&envId=top-interview-150

풀이

정수형 배열 nums1, nums2 와 각 배열안의 요소를 나타내는 m, n 이 주어진다.

nums1 의 m을 초과하는 주소의 원소인 0은 nums2의 요소들이 들어가야 할 자리이므로 nums1 의 크기는 m보다 더 클 수 있다는 점을 유의해야 하는 정렬 문제!

두 배열을 병합한 후 정렬해야한다.

  1. 채워넣어야 하는 수의 개수는 nums2 의 길이만큼이다. 따라서 nums2 만큼 반복문을 수행한다.
    1. 빈칸 0은 nums1에만 존재하기 때문이다.
  2. nums1의 빈칸(m+i)에 nums2의 요소들을 채워 넣는다.
    1. 채워넣을 수 있는 빈칸 0은 주소값 m 이후로 존재하기 때문이다.
  3. nums1을 정렬한다.

코드

Python

class Solution(object):
    def merge(self, nums1, m, nums2, n):
        
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: None Do not return anything, modify nums1 in-place instead.
        """
        for i in range(n):
            nums1[m + i] = nums2[i]

        nums1.sort()

시도

주어진 리스트에 직접 요소들을 담아 제출하는 리트코드의 제출 형식이 익숙치 않고,
nums1의 끝에서 시작하는 0들을 무시해야한다고 오역(denote는 나타내다이다..)해 짠 코드이다.

nums1의 끝에서 나타나는 0 을 무시하고, 모든 요소를 빼낸 뒤 lst에 nums1nums2의 요소들을 섞어 다시 nums1에 채워넣는 방식이다.
메모리 효율이 매우매우 비효율적임을 알면서도 짰던 코드이다. ☹️

class Solution(object):
    def merge(self, nums1, m, nums2, n):
        if len(nums1) > m and nums1[-1] == 0:
            idx = len(nums1) - 1
            
            while idx >= 0 and nums1[idx] == 0 and len(nums1) > m:
                nums1.pop()
                idx -= 1
        

        lst = sorted(nums1 + nums2)
        del nums1[:]
        for l in lst:
            nums1.append(l)

카테고리:

업데이트:

댓글남기기