문제
두 개의 배열(base, sample)을 입력받아 sample이 base의 부분집합인지 여부를 리턴해야 합니다.
주의사항
base, sample 내에 중복되는 요소는 없다고 가정합니다.
입출력예시
let base = [1, 2, 3, 4, 5];
let sample = [1, 3];
let output = isSubsetOf(base, sample);
console.log(output); // --> true
sample = [6, 7];
output = isSubsetOf(base, sample);
console.log(output); // --> false
base = [10, 99, 123, 7];
sample = [11, 100, 99, 123];
output = isSubsetOf(base, sample);
console.log(output); // --> false
정답
const isSubsetOf = function (base, sample) {
// TODO: 여기에 코드를 작성합니다.
let count = 0;
for (const el of sample){
if (base.includes(el)) count++;
}
return count === sample.length ? true : false;
};
처음에 정답을 이렇게 적었었는데 통과가 안됐다. includes 메서드도 중복으로 돌아가기때문에, 오래걸리는 것 같았다.
그럼 RegExp 정규식을 활용해야하나 했다.
const isSubsetOf = function (base, sample) {
// TODO: 여기에 코드를 작성합니다.
const arr = [];
const copy = base.join('')
for (const el of sample){
const reg = new RegExp(`${el}`,'g');
const common = reg.test(copy);
if(!common) return false
}
return true
};
이런식으로 풀었는데, 이것도 통과가 안됐다. 따라서 for 문을 두번 돌아서 해결했다.
const isSubsetOf = function (base, sample) {
// TODO: 여기에 코드를 작성합니다.
let dict = {}
for (const el of base){
dict[el] = 1;
}
for(const el of sample){
if (dict[el] === undefined) return false;
}
return true;
};
객체를 만들어서 사전처럼 프로퍼티를 만들고, sample이 돌면서 undefined면 즉시 false를 돌게 했다.
어렵다.. 어려워..