[Array/String] Merge Sorted Array

은지일·2023년 8월 26일
0

알고리즘

목록 보기
1/17

1. 문제

LeetCode - Merge Sorted Array
두 개의 정수형 배열(nums1, nums2)를 합쳐서 오름차순 정렬한 후, nums1에 저장하는 문제

2. 접근법

  • ArrayList를 활용할 지, nums1과 nums2의 요소 수(m, n)를 합친 길이의 새로운 배열(nums3)을 활용할지 고민
  • 새로운 배열을 활용하기로 결정
  • 테스트 통과 후 ArrayList 활용 방법도 추가

3. 풀이

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // 1. m + n 길이의 배열 선언
        int[] nums3 = new int[m + n];

        // 2. nums3에 nums1, nums2 차례대로 병합
        for (int i = 0; i < m; i++) {
            nums3[i] = nums1[i];
        }

        for (int i = m; i < m + n; i++) {
            nums3[i] = nums2[i - m];
        }

        // 3. nums3 오름차순 정렬
        Arrays.sort(nums3);

        // 4. nums1을 nums3로 대치
        for (int i = 0; i < nums3.length; i++) {
            nums1[i] = nums3[i];
        }
    }
}

4. 성능

- Runtime : 1ms

- Memory : 41.46mb

5. 개선

  • ArrayList 사용 버전
  • 배열을 사용했을 때보다 가독성이 더 좋다고 생각했다.
import java.util.ArrayList;

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // 1. nums1과 nums2 요소를 병합할 ArrayList 선언
        ArrayList<Integer> list = new ArrayList<>();

        // 2. list에 nums1, nums2 차례대로 병합
        for (int i = 0; i < m; i++) {
            list.add(nums1[i]);
        }

        for (int i = 0; i < n; i++) {
            list.add(nums2[i]);
        }

        // 3. list 오름차순 정렬
        Collections.sort(list);

        // 4. nums1을 list의 요소로 대치
        for (int i = 0; i < list.size(); i++) {
            nums1[i] = list.get(i);
        }
    }
}
profile
항상 더 나은 방법을 찾는 백엔드 개발자 은지일입니다 :)

0개의 댓글