배열의 겹치는 부분을 찾는 문제다.
1은 여러번 겹쳐도 하나만 리턴하면 되고,
2는 여러번 겹치면 여러개를 리턴해야 한다.
Intersection of Two Arrays I
var intersection = function(nums1, nums2) {
const answer = []
for (n1 of nums1) {
if(nums2.includes(n1)){
answer.push(n1)
}
}
return Array.from(new Set(answer));
};
nums1 배열을 반복을 돌면서 nums2에도 있다면 삭제하고 answer 배열에 담는 방식으로 풀었다.
var intersection = function(nums1, nums2) {
const answer = nums1.filter((n1) => nums2.includes(n1))
return Array.from(new Set(answer));
};
filter를 사용해 축약할수도 있다.
var intersection = function(nums1, nums2) {
const arr1 = Array.from(new Set(nums1));
const answer = arr1.filter((n1) => nums2.includes(n1))
return answer;
};
아니면 애초에 배열 하나 또는 둘 다 unique하게 만든 후 해도 좋을 것 같다.
Intersection of Two Arrays II
var intersect = function(nums1, nums2) {
const answer = [];
for(let n1 of nums1) {
const index = nums2.indexOf(n1);
if(index > -1) {
const deleted = nums2.splice(index, 1);
answer.push(deleted[0]);
}
}
return answer;
};
nums1의 반복을 돌면서, nums2에 있으면 삭제하고 answer배열에 담는다.
var intersect = function(nums1, nums2) {
const answer = [];
// 정렬 후, 더 짧은 배열로 반복을 돌면 배열이 길 때 좋을 것 같다.
nums1.sort();
nums2.sort();
let short = nums1;
let long = nums2;
if (nums1.length > nums2.length){
short = nums2;
long = nums1;
}
for(let n1 of short) {
const index = long.indexOf(n1)
if(index > -1) {
const deleted = long.splice(index, 1);
answer.push(deleted[0])
}
}
return answer;
};
'Web development > Algorithm' 카테고리의 다른 글
[LeetCode] 46. Permutations 순열 (Javascript) (0) | 2020.07.22 |
---|---|
[LeetCode] 11. Container With Most Water (Javascript) (0) | 2020.07.21 |
[LeetCode] 189. Rotate Array (Javascript) (0) | 2020.07.20 |
[HackerRank 30 Days of Code] Day 5 ~ Day 7 (0) | 2020.07.13 |
[javascript] 큐, 스택 구현 (0) | 2020.07.08 |
댓글