Immersive Toy Problem 03

워뇽쿤·2022년 9월 16일
post-thumbnail

문제 : isSubsetOf

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

입력

인자 1 : base

  • number 타입을 요소로 갖는 임의의 배열
  • base.length는 100 이하

인자 2 : sample

  • number 타입을 요소로 갖는 임의의 배열
  • sample.length는 100 이하

출력

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

주의사항

  • 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: 여기에 코드를 작성합니다.
    base.sort((a, b) => a - b);
  sample.sort((a, b) => a - b);

  //base를 순회하면서 sample[i]의 index를 찾는 함수
  const findItemInSortedArr = (item, arr, from) => {
    for (let i = from; i < arr.length; i++) {
      //sample[i]와 같은 요소를 찾으면 index 리턴
      if (item === arr[i]) {
        return i;
      /*오름차순 정렬이므로 sample[i]보다 base의 요소가 크면
      더이상 순회하지 않고 -1리턴.*/
      } else if (item < arr[i]) {
        return -1;
      }
    }
    //sample[i]가 없으면 -1리턴.
    return -1;
  };

  let baseIdx = 0;
  for (let i = 0; i < sample.length; i++) {
    // findItemInSortedArr의 리턴값 index부터 순회 시작
    baseIdx = findItemInSortedArr(sample[i], base, baseIdx);
    //리턴값이 -1이면 부분집합이 아니기 때문에 false 리턴
    if (baseIdx === -1) return false;
  }
  // 모두 순회 후 -1이 없다면 true 리턴
  return true;
};
profile
QA 성장기

0개의 댓글