[Array / String] Merge Sorted Array

Yongki Kim·2023년 8월 24일
0
post-thumbnail

88. Merge Sorted Array

지문은 링크에서 확인해주세요.

1. 해답을 보지 않고 스스로 문제를 해결한 과정

/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
  for(let i = m; i < m + n; i++) {
    nums1[i] = nums2.shift();
  }

  return nums1.sort((a, b) => a - b);
};

Example 1을 확인하자마자, for문 조건이 직관적으로 떠올랐습니다. nums1 배열의 0의 값의 요소들이 nums2의 요소가 들어갈 자리라 확인하였기 때문입니다.

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.

이로써 merge가 됬다면, JS배열에서 제공하는 sort 메소드로 sorted 하였습니다. JS배열의 sort 메소드에 compareFunction이 없다면 문자열 비교를 하기 때문에 숫자 비교가 되는 로직을 추가하였습니다.

compareFunction이 제공되지 않으면 요소를 문자열로 변환하고 유니 코드 코드 포인트 순서로 문자열을 비교하여 정렬됩니다. ― MDN

2. 해답을 찾아서 자신이 작성한 알고리즘에 대해서 회고한 내용

Using STL

해답의 전문은 링크를 확인해주세요.

var merge = function(nums1, m, nums2, n) {
  for (let i = m, j = 0; j < n; i++, j++) {
      nums1[i] = nums2[j];
  }
  nums1.sort((a, b) => a - b);
};

필자의 해답과 다르게 nums2 배열의 요소에 변경을 가하지 않고 해결한 해답이었습니다. 이로써 nums2로 넘어오는 인수를 범용적으로 사용할 수 있습니다.

0개의 댓글