본문 바로가기
알고리즘

[LeetCode/JAVA] 88. Merge Sorted Array

by 상후 2021. 7. 26.
728x90
반응형

https://github.com/ROUTINE-STUDY/Algorithm

알고리즘 스터디를 진행하고 있습니다.
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.

문제 출처 : https://leetcode.com/problems/merge-sorted-array/

 

Merge Sorted Array - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제 설명

출처 : LeetCode

2개의 배열과, 배열 내 병합할 원소의 개수를 의미하는 m, n이 주어집니다.
각각의 배열의 m, n 번지까지의 배열을 병합하여 정렬된 배열을 반환하세요.
이때 새로운 배열을 return 하는게 아닌 첫 번째 배열에 값을 담으세요.
풀이 방법
1. 기준이 되는 첫 번째 배열(nums1)의 m개 까지는 무조건 고정
2. m번째 인덱스부터 nums2 배열의 값을 담음
3. Arrays.sort()를 이용하여 정렬
내 코드(JAVA)

 

public void merge(int[] nums1, int m, int[] nums2, int n) {
    int index=0;
	
    // m 인덱스 부터 nums2의 값을 순서대로 넣어준 뒤 정렬
    for(int i=m; i<nums1.length; i++) {
        nums1[i] = nums2[index++]; 
    }

    Arrays.sort(nums1);
}
다른 사람 코드

 

public void merge(int[] nums1, int m, int[] nums2, int n) {
    int tail1 = m - 1, tail2 = n - 1, finished = m + n - 1;
    while (tail1 >= 0 && tail2 >= 0) {
        nums1[finished--] = (nums1[tail1] > nums2[tail2]) ? 
                             nums1[tail1--] : nums2[tail2--];
    }

    while (tail2 >= 0) { //only need to combine with remaining nums2
        nums1[finished--] = nums2[tail2--];
    }
}

 

정렬 메서드를 사용하지도, 정렬을 직접 구현하지도 않고 푼 방법

각 배열의 꼬리 즉, 끝 값을 포인터로 지정하여 더 큰 값을 찾아 반환해야 할 배열의 꼬리부터 채워 넣는 방식

값이 존재하는 범위까지만 변수로 담은 방법이 좋은 것 같다.

 

메서드에 너무 익숙해져 있는 것 같다. 메서드를 잘 활용해서 풀이를 해도 좋지만 이러한 방법으로 풀어보는 것도 도전해야겠다.

728x90
반응형

댓글