두 개의 배열(base, sample)을 입력받아 sample이 base의 부분집합인지 여부를 리턴해야 합니다.
입출력 예시
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) {
base.sort((a, b) => a - b);
sample.sort((a, b) => a - b);
function findSort(sample,arr,idx){
for(let n = idx ; n<arr.length ; n++){
if(arr[n] === sample) return n
else if(arr[n]>sample) return -1
}
return -1
}
let baseidx = 0
for(let n = 0 ; n<sample.length ; n++){
baseidx = findSort(sample[n],base,baseidx)
if(baseidx === -1){
return false
}
}
return true
}
함수안에 sample의 요소를 넘겨줄 함수를 만들고 baseidx 가 -1이 나오면 펄스가된다
find소트는 base 배열을 받는데 sample i 랑 base 의 base[0]이랑 비교하게된다
1 과 1이나올경우 현재 0번째 인덱스가 baseidx에 가 되고 그다음 sample의 sample[1]이 들어가게된다
sample[1] 은 현재 3인데 맞지않기 때문에 다음 조건문에 else if(arr[n]>sample) 에 검사받게되고
이조건문은 base가 sample[n]보다 크다면 펄스인데 부분집합을 검사하는 알고리즘이기에
sample[n]이 더커버리다면 애초에 틀어지기때문에 바로 -1 을 리턴하나 현재상황에서는 base[n]이 더작기에 다음 base[1]로넘어가고
이상태에서 맞지않고 또 다음조건을 비교했을때 아직 작기때문에 base[2]로 넘어갈시 3 : 3 으로 짝이 맞게된다
baseidx === 2를 리턴하게되고 함수를 빠져나와 밑의 포문으로 들어가고 더이상 진행할 sample 요소가 없기에 부분집합임을 확정한후
트루를 리턴한다