배열인 base와 sample을 인자로 입력 받아 sample이 base의 부분집합인지 여부를 리턴하는 문제
(아래 스니펫들은 문제 풀이 중 부분만 담고 있음)
문제 풀이 순서
base.sort((a-b) => a-b)
sample.sort((a-b) => a-b)
const findInSortedArr= (item,arr,from) => {
for (let i = from; i < arr.length; i++) {
if (item === arr[i]) return i;
else if (item < arr[i]) return -1;
}
return -1;
}
let baseIdx = 0;
for (let i = 0; i < sample.length; i++) {
baseIdx = findItemInSortedArr(sample[i], base, baseIdx);
if (baseIdx === -1) return false;
}
return true;
사실 순서로는 아래쪽 식부터 시작되고, 위의 함수에 baseIdx 값 등이 전달되면 비교 후,
같은 값이 있다면 해당 값이 있는 index가 baseIdx로 전달됨.
만약 같은 값이 아니면서 샘플의 요소 값이 base의 요소 값보다 작게 되면 그 이후로는 같은 값이 있을 가능성이 없어지므로 (정렬을 했기 때문에) 바로 -1을 리턴하고, -1이 리턴되면 false가 리턴된다.
*이중 반복문으로 만들어보려고 했는데 내가 틀리게 작성했는지 제대로 결과가 나오지 않았음.
이후에 추가적으로 학습해보고 더 추가할 점 있으면 더 추가할 예정.