[LeetCode] Merge Two 2D Arrays by Summing Values

아르당·2026년 10월 14일

LeetCode

목록 보기
545/571
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

두 개의 2차원 정수 배열 nums1과 nums2가 주어진다.

  • nums1[i] = [idi, vali]는 id idi가 숫자의 값이 vali와 같음을 나타낸다.
  • nums2[i] = [idi, vali]는 id idi가 숫자의 값이 vali와 같음을 나타낸다.

각 배열은 고유한 id를 포함하고, id를 기준으로 오름차순 정렬되어 있다.
다음 조건을 준수하여 두 배열을 id 기준 오름차순으로 정렬된 하나의 배열로 병합해라.

  • 두 배열 중 적어도 하나에 포함된 id만 결과 배열에 포함되어야 한다.
  • 각 id는 한 번만 포함되어야 하고, 그 값은 두 배열에 있는 해당 id의 값들을 합산한 것이어야 한다. 만약 두 배열 중 한 곳에 해당 id가 없다면, 그 배열에서의 값은 0으로 간주한다.

결과 배열을 반환해라. 반환되는 배열은 id를 기준으로 오름차순 정렬되어 있어야 한다.

Example

#1
Input: nums1 = [[1, 2], [2, 3], [4, 5]], nums2 = [[1, 4], [3, 2], [4, 1]]
Output: [[1, 6], [2, 3], [3, 2], [4, 6]]

#2
Input: nums1 = [[2, 4], [3, 6], [5, 5]], nums2 = [[1, 3], [4, 3]]
Output: [[1, 3], [2, 4], [3, 6], [4, 3], [5, 5]]

Constraints

  • 1 <= nums1.length, nums2.length <= 200
  • nums1[i].length == nums2[i].length == 2
  • 1 <= idi, vali <= 1000
  • 배열 둘 다 고유한 id를 포함한다.
  • 배열 둘 다 id 기준으로 오름차순으로 정렬되어있다.

Solved

class Solution {
    public int[][] mergeArrays(int[][] nums1, int[][] nums2) {
        int i = 0;
        int j = 0;
        List<int[]> result = new ArrayList<>();

        while (i < nums1.length && j < nums2.length) {
            if (nums1[i][0] == nums2[j][0]) {
                result.add(new int[]{
                    nums1[i][0],
                    nums1[i][1] + nums2[j][1]
                });
                i++;
                j++;
            } else if (nums1[i][0] < nums2[j][0]) {
                result.add(nums1[i]);
                i++;
            } else {
                result.add(nums2[j]);
                j++;
            }
        }

        while (i < nums1.length) {
            result.add(nums1[i++]);
        }

        while (j < nums2.length) {
            result.add(nums2[j++]);
        }

        return result.toArray(new int[result.size()][]);
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글