Leetcode Java Merge Two 2D Arrays by Summing Values
업데이트:
문제
코드
class Solution {
public int[][] mergeArrays(int[][] nums1, int[][] nums2) {
int nums1Length = nums1.length;
int nums2Length = nums2.length;
int i = 0;
int j = 0;
List<int[]> result = new ArrayList<>();
while (i < nums1Length && j < nums2Length) {
if (nums1[i][0] == nums2[j][0]) {
result.add(new int[] { nums1[i][0], nums1[i++][1] + nums2[j++][1] });
} else if (nums1[i][0] < nums2[j][0]) {
result.add(nums1[i++]);
} else {
result.add(nums2[j++]);
}
}
while (i < nums1Length) {
result.add(nums1[i++]);
}
while (j < nums2Length) {
result.add(nums2[j++]);
}
return result.toArray(new int[result.size()][]);
}
}
결과
설명
- 아래의 규칙대로 구성된 nums1과 nums2 배열을 키 기준으로 값을 합쳐서 반환하는 문제이다.
- nums1과 nums2는 첫번째 값이 키이고, 두 번째 값으로 구성되어 있다.
- nums1과 nums2는 키 기준으로 오름차순 정렬되어 있다.
- 문제 풀이에 필요한 변수를 정의한다.
- nums1Length와 nums2Length는 num1과 num2의 길이를 저장한 변수이다.
- i와 j는 num1과 num2 내 위치를 계산할 변수로, 0으로 초기화한다.
- result는 주어진 기준 내 키에 대한 값들의 합을 저장할 변수로, 합친 키의 갯수가 불분명하여 ArrayList로 초기화한다.
- i가 nums1Length 미만이고, j가 nums2Length 미만일 때 까지 아래를 반복한다.
- nums1[i][0]의 값과 nums2[j][0]의 값이 동일한 경우, result에 nums1[i][0]의 값과 $nums1[i][1] + nums2[j][1]$ 값을 배열로 넣어주고 i와 j를 증가시킨다.
- nums1[i][0]의 값이 nums2[j][0]의 값보다 작은 경우, result에 nums1[i] 배열을 넣어주고 i를 증가시킨다.
- nums1[i][0]의 값이 nums2[j][0]의 값보다 큰 경우, result에 nums2[j] 배열을 넣어주고 j를 증가시킨다.
-
i가 nums1Length 미만일 때 까지 result에 nums1[i] 배열을 넣어주면서 i를 증가시켜 남은 배열을 넣어준다.
-
j가 nums1Length 미만일 때 까지 result에 nums2[j] 배열을 넣어주면서 i를 증가시켜 남은 배열을 넣어준다.
- 반복이 완료되면 result를 해당 길이 크기의 정수 배열로 변환하여 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기