1. 알고리즘 문제
- 배열 nums1과 nums2가 주어지고 각 배열의 유효한 원소 개수는 m, n개 이다.
- 두 배열의 유효한 원소를 합쳐 nums1 배열의 총 길이가 m+n이 되도록.(오름차순 정렬)
2. 시도
반복문을 통해 nums1의 원소가 0이라면 nums2의 원소로 교체하면 될 것 같았다.
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int j = 0; for (int i=0; i<m+n; i++) { if (nums1[i] == 0) { nums1[i] = nums2[j]; j++; } } System.out.println("nums1 = " + Arrays.toString(nums1)); Arrays.sort(nums1); } }
위의 코드를 실행하고 3가지 케이스는 성공하였지만 최종 제출했을 때 에러가 발생했다.
3. 실패 분석
- 예시 문제를 잘못 이해한 듯하다.
- 예시 문제들과 같이 nums1 배열의 크기는 꼭 m과 동일하지 않았다. 그리고 nums1 배열의 가장 뒤 원소 0의 개수가 nums2 배열의 길이 n과 같았고 nums2의 원소들로 교체되어야 했다.
4. 개선
if 조건을 수정해 nums1배열의 모든 원소에 대해 0을 검사하고 교체하는 게 아닌, nums1 배열 뒤의 원소가 0인 것들만 확인하여 nums2로 교체하였다.
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int j = 0; for (int i=0; i<nums1.length; i++) { System.out.println("nums1 원소 = " + nums1[i]); if (nums1.length >= m && n > j) { nums1[m] = nums2[j]; j++; m++; } } System.out.println("result = " + Arrays.toString(nums1)); Arrays.sort(nums1); } }
'자바 알고리즘' 카테고리의 다른 글
[leetcode - Java] 26. Remove Duplicates from Sorted Array (0) | 2023.08.24 |
---|---|
[leetcode - Java] 27. Remove Element (0) | 2023.08.24 |
[알고리즘] 프로그래머스 - 피보나치 수 (0) | 2023.05.31 |
[알고리즘] 프로그래머스 - 구명보트(Greedy) (0) | 2023.05.27 |
[알고리즘] 프로그래머스 - 이진 변환 반복하기 (0) | 2023.05.25 |