코린이의 소소한 공부노트

[LeetCode/Easy] 2570. Merge Two 2D Arrays by Summing Values 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 2570. Merge Two 2D Arrays by Summing Values

무지맘 2023. 5. 6. 01:52

1. Input

1) int[][] nums1

2) int[][] nums2

- 두 배열의 요소는 [id, val] 형식으로, valid의 가치를 나타낸다.

 

2. Output

1) nums1nums2를 다음과 같이 합친 결과를 반환

- id가 같은 것이 두 배열에 있다면 가치를 합한다.

- 결과 배열은 id를 기준으로 오름차순으로 정렬한다.

- 없는 id는 고려하지 않는다.

 

3. Constraint

1) 1 <= nums1.length, nums2.length <= 200

2) nums1[i].length == nums2[j].length == 2

3) 1 <= id, val <= 1000

4) 각 배열 내에는 중복된 id가 없다.

5) 두 배열 모두 id를 기준으로 오름차순으로 정렬되어 있다.

 

4. Example

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

설명:

- id = 1, 2 + 4 = 6

- id = 2, 3 + 0 = 3

- id = 3, 0 + 2 = 2

- id = 4, 5 + 1 = 6

 

5. Code

1) 첫 코드(2023/05/06)

class Solution {
    public int[][] mergeArrays(int[][] nums1, int[][] nums2) {
        HashMap<Integer,Integer> m = new HashMap<>();
        for(int i=0 ; i<nums1.length ; i++)
            m.put(nums1[i][0], m.getOrDefault(nums1[i][0],0)+nums1[i][1]);
        for(int i=0 ; i<nums2.length ; i++)
            m.put(nums2[i][0], m.getOrDefault(nums2[i][0],0)+nums2[i][1]);
        List<Integer> list = new ArrayList<Integer>(m.keySet());
        list.sort(Comparator.naturalOrder());
        int[][] answer = new int[list.size()][2];
        for(int i=0 ; i<answer.length ; i++){
            answer[i][0] = list.get(i);
            answer[i][1] = m.get(list.get(i));
        }
        return answer;
    }
}