Tree 문제에 약하기도 하고 경험이 없어 쉬운 난이도부터
풀이를 진행했어요.
문제 자체는 쉬웠지만 다른 분들의 코드를 보며 새로 배운 개념이 있어
포스팅하게 되었습니다.
문제 접근
root의 left와 right가 존재하지 않는 요소가 마지막 node이므로
마지막 node라면 배열에 추가를 해준 후, root1의 node를 담는 배열과
root2의 node를 담는 배열을 비교하면 될 것으로 예상되었습니다.
나의 풀이 & 다른 풀이
첫 풀이
각 결과를 담는 배열들을 문자열로
형변환을 통해 비교를 했는데요.
순서가 다를 시에도 true 값으로 결과가 발생하는 케이스가 존재해
테스트 케이스에서 실패했습니다.
var leafSimilar = function(root1, root2) {
const arr1 = [], arr2 = [];
const searchTree = (root, array) => {
if (!root) return;
if (!root.left && !root.right) array.push(root.val);
searchTree(root.left, array);
searchTree(root.right, array);
}
searchTree(root1, arr1);
searchTree(root2, arr2);
return arr1.join('') === arr2.join('');
};
두 번째 풀이
배열을 형변환 하는 것이 아닌,
root1과 root2의 배열을 순회하며 비교해
모든 요소가 일치하면 true를 return 하는
every 메서드를 사용해 해결할 수 있었습니다.
var leafSimilar = function(root1, root2) {
const arr1=[],arr2=[];
const searchTree = (root,array) => {
if(!root) return;
if(!root.left && !root.right) array.push(root.val);
searchTree(root.left,array);
searchTree(root.right,array);
}
searchTree(root1,arr1);
searchTree(root2,arr2);
const isSameLeaf = (array1,array2) => {
if(array1.length !== array2.length) return false;
return array1.every((leaf,index)=> leaf === array2[index]);
}
return isSameLeaf(arr1,arr2);
};
다른 풀이
제가 every 메서드의 idx로 배열의 순서를 보장해 값을 비교했다면
toString 메서드와 JSON.strigify 메서드를 사용하는 방법도 존재했습니다.
// JSON.stringify
JSON.stringify([1,2,3]) === JSON.stringify([1,2,3]); // true
// toString
const arr1 = [1, 2, 3];
const arr2 = [1, 2, 3];
array1.toString() === array2.toString(); // true
하지만 toString과 JSON.stringify의 차이점이 존재했는데요.
toString은 중첩 배열이나 객체를 포함한 배열을 비교할 수 없다는 점이었습니다.
const arr1 = [32, { name: 'kang' }];
const arr2 = [32, { name: 'kang' }];
array1.toString() === array2.toString(); // false
JSON.stringify(array1) === JSON.stringify(array2); // true
'Algorithm' 카테고리의 다른 글
Leetcode 2570. Merge Two 2D Arrays by Summing Values (0) | 2024.06.16 |
---|---|
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 |