[알고리즘] 배열의 부분집합 : isSubsetOf

프최's log·2020년 12월 1일
0

study

목록 보기
47/59

문제 바뀌기 전 해결법

1.array 안에 비교대상(this)의 요소가 다 있으면 true아니면 false

Array.prototype.isSubsetOf = function(array) {
  return this.every(ele => (array.includes(ele)) ? true : false)
};

변경된 문제

두 개의 배열(base, sample)을 입력받아 sample이 base의 부분집합인지 여부를 리턴해야 합니다.

입력

인자 1 : base
number 타입을 요소로 갖는 임의의 배열 (base.length <= 100 )
인자 1 : sample
number 타입을 요소로 갖는 임의의 배열 (sample.length <= 100

출력

  • boolean 타입을 리턴해야 합니다.

주의사항

  • base, sample 내에 중복되는 요소는 없다고 가정합니다.
const isSubsetOf = function (base, sample) {
 return  sample.every(ele => (base.includes(ele)) ? true : false)
  // return sample.every((item) => base.includes(item));
};

시간 복잡도를 개선하여, Advanced 테스트 케이스(base, sample의 길이가 70,000 이상)를 통과해 보세요.

ref

const isSubsetOf = function (base, sample) {
  base.sort((a, b) => a - b);
  sample.sort((a, b) => a - b);

  const findItemInSortedArr = (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;
};
profile
차곡차곡 쌓아가는 나의 개발 기록

0개의 댓글