주어진 2개의 이차원 배열 내부의 요소인 배열의 [0]번째 값이 서로 같다면 더하고,
다르다면 배열 요소를 그대로 추가하는 문제.
첫번째 문제 접근
처음엔 filter로 접근해 문제를 해결해보려고 했습니다.
filter와 forEach를 사용해 배열의 [0]번째 값이 같은 케이스는 처리했지만
값이 다른 케이스를 처리하지 못해 해당 코드를 폐기했습니다.
// 처음 접근 코드
/**
* @param {number[][]} nums1
* @param {number[][]} nums2
* @return {number[][]}
*/
var mergeArrays = function(nums1, nums2) {
const output= [];
const c = nums1.filter(num1Arr => {
const key1 = num1Arr[0];
nums2.forEach(num2Arr => {
const key2 = num2Arr[0];
if(key1 === key2) {
output.push([key1,num1Arr[1]+num2Arr[1]]);
} else if(key1 < key2) {
output.push(num1Arr);
} else if(key1 > key2) {
output.push(key2,num2Arr);
}
})
});
console.log({output});
};
위의 코드를 사용하면 key1과 key2가 매번 비교되며 배열값이 추가되어져 문제가 되었습니다.
너무 어렵게 접근하는 듯 해서 객체를 사용해 접근해보기로 했습니다.
두번째 문제 접근 & 해결 코드
객체를 사용해 첫번째 배열을 output이라는 객체에 key와 value로 저장하고
두번째 배열의 값이 output 객체에 존재한다면 값을 더합니다.
만약 output 객체에 존재하지 않는다면 키과 값을 output 객체에 추가합니다.
자바스크립트라서 Object.entries(output)까지만 작성해줘도 동작하지만
return에 모두 숫자형이라고 명시하는 것이 신경쓰여 map 메서드를 사용해줬고,
key값을 Number 타입으로 변환해 새로운 배열로 return 해줬습니다.
/**
* @param {number[][]} nums1
* @param {number[][]} nums2
* @return {number[][]}
*/
var mergeArrays = function(nums1, nums2) {
const output = {};
for(const [key,value] of nums1) {
output[key] = value;
}
for(const [key,value] of nums2) {
output[key] = (output[key] || 0) + value;
};
return Object.entries(output).map(([key, value]) => [Number(key), value]);
};
'Algorithm' 카테고리의 다른 글
LEETCODE 872. Leaf-Similar Trees (0) | 2024.08.08 |
---|---|
Leetcode 2643. Row With Maximum Ones (1) | 2024.06.10 |
Leetcode 2843. Count Symmetric Integers (0) | 2024.06.04 |
LEETCODE 1002. find-common-characters (0) | 2024.06.01 |
LEETCODE 2331. Evaluate Boolean Binary Tree (0) | 2024.05.20 |