문제 설명 :
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 |