LeetCode[ Easy | Python ] Merge Sorted Array
업데이트:
링크
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보다 더 클 수 있다는 점을 유의해야 하는 정렬 문제!
두 배열을 병합한 후 정렬해야한다.
- 채워넣어야 하는 수의 개수는
nums2
의 길이만큼이다. 따라서nums2
만큼 반복문을 수행한다.- 빈칸 0은
nums1
에만 존재하기 때문이다.
- 빈칸 0은
nums1
의 빈칸(m+i)에nums2
의 요소들을 채워 넣는다.- 채워넣을 수 있는 빈칸 0은 주소값
m
이후로 존재하기 때문이다.
- 채워넣을 수 있는 빈칸 0은 주소값
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에 nums1
과 nums2
의 요소들을 섞어 다시 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)
댓글남기기