본문 바로가기
Algorithm/LeetCode

[Java] 88. Merge Sorted Array

by tabasco 2023. 6. 12.

문제 설명 : 

2개의 int 배열이 주어지고, 이 두 배열을 합치면서 정렬시키는 문제이다.
정렬하는 과정에서 각 배열에 유효한 값(덮어써지면 안되는 값)을 m과 n으로 알려주고 있다.

 

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int[] larger = (nums1.length >= nums2.length)?nums1:nums2;
        int[] shorter = (nums1.length >= nums2.length)?nums2:nums1;
        int check = (nums1.length >= nums2.length)?nums1.length-m:nums2.length-n;
        int sLength = shorter.length-1;

        for(int i=0; i<larger.length; i++){
            if(larger[i] == 0 && check > 0 ){
                larger[i] = shorter[sLength];
                sLength--;
                check--;
            }
        }

        Arrays.sort(larger);

        for(int i=0; i<nums1.length; i++){
            nums1[i] = larger[i];
        }

    }
}

해설 : 

더 효율적인 방법이 있을 것 같아 나중에 다시 풀어보려한다. 일단 현재는 두 배열 중 사이즈가 큰 배열과 작은 배열을 찾고,
사이즈가 큰 배열의 유효하지 않은 값의 갯수(아마 사이즈가 작은 배열의 유효한 갯수와 같은 것이다.)만큼 사이즈가 큰 배열의 0의 자리에 대체시키고, 마지막으로 해당 배열을 정렬하면 문제가 해결된다.

끝으로 return하지 않고 nums1이라는 배열 자체를 가지고 체점하기 때문에 해당 배열에 값을 덮어주면 끝난다.

'Algorithm > LeetCode' 카테고리의 다른 글

[Java] 100. Same Tree  (0) 2023.06.12
[Java] 94. Binary Tree Inorder Traversal  (0) 2023.06.12
[Java] 83. Remove Duplicates from Sorted List  (0) 2023.06.09
[Java] 70. Climbing Stairs  (2) 2023.06.09
[Java] 69. Sqrt(x)  (0) 2023.06.09