AIFactory Fish Classification Temp
업데이트:
Leetcode Top Interview 150 - 24.09.19
88. Merge Sorted Array
- 내 풀이
# 내 풀이
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.
"""
for i in range(len(nums1) - m):
nums1.remove(0)
nums1.extend(nums2)
nums1.sort()
간단하게 두 개의 list (nums1과 nums2)를 merge한 후 오름차순 정렬을 해야하는 문제이다.
하지만 특이사항으로 정답을 return하지 말고 nums1 list 자체를 modify하기만 하면 된다.
즉, 주어진 nums1 list 그 자체를 요구사항대로 수정을 하여야 한다는 것.
가장 먼저 떠오르는 방법으로는 nums1과 nums2를 더한 후 sort한 결과를 nums1에 할당하면 된다고 생각해서 제출을 했었는데…
nums1 = sorted(nums1 + nums2)
위와 같은 방법을 사용하면 기존의 nums1이 아닌 새로운 list를 만들어 sorting을 하게 되므로 nums1 list 자체가 바뀌지는 않는다.
따라서 list를 직접 수정하는 방법을 사용하였는데,
- list.remove()를 이용해 nums1 list 뒷부분의 의미없는 0을 제거한 후
- list.extend()로 nums1 list 뒤에 nums2 list를 이어붙였고
- list.sort()를 통해 nums1 list 자체를 sort하였다. (sorted()를 사용하면 nums1의 sorting된 list가 새로 만들어진다.)
- 다른 풀이
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.
"""
l, r = 0, 0
copy1 = deepcopy(nums1)
for i in range(n+m):
if r >= n or (l < m and copy1[l] <= nums2[r]):
nums1[i] = copy1[l]
l += 1
else:
nums1[i] = nums2[r]
r += 1
다른 방법으로는 left와 right의 pointer를 만들어서 for loop을 순회하며 nums1의 각 요소와 nums2의 요소를 하나씩 대소비교를 하여 nums1의 요소를 nums2의 요소로 직접 바꿔주는 방법이 있다.
댓글남기기