본문 바로가기
codes/daily coding

24_isSubsetOf

by Mia_ 2022. 12. 26.

Array.prototype.every( ) 메서드

: 배열 안에 모든 요소가 주어진 판별 함수를 통과하는지 테스트. Boolean 값을 반환 함

 

Array.prototype.includes( ) 메서드

: 배열이 특정 요소를 포함하고 있는지 판별

 

Array.from( ) 메서드

: 유사 배열 객체(array-like-object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운 Array 객체를 만듬

 

1st_naive solution
: 베이스에서 샘플이랑 일치하는 요소가 나오면 그 요소들만 모은 배열을 만들어서 샘플이랑 비교 후 결과 리턴
// naive solution
// : 베이스에서 샘플이랑 일치하는에 배열만들어서 똑같으면 true return 하기
const isSubsetOf = function (base, sample) {

  const compare = [];

  for(let i = 0; i < base.length; i++){
    for(let j = 0; j < sample.length; j++){
      if(sample[j] === base[i]){
        compare.push(sample[j]);
        console.log(compare)
      }
    }
  }
  return JSON.stringify(sample) === JSON.stringify(compare) 
};

 

2nd_naive solution
: includes(), every() 활용
const isSubsetOf = function (base, sample) {
  return sample.every((el) => base.includes(el))
};

 

reference code
const isSubsetOf = function (base, sample) {

  // 1. 순서대로 정렬
  base.sort((a, b) => a - b);
  sample.sort((a, b) => a - b);

  // 2. 함수 생성 
  // --> 요소와 배열, 순회 시작일 될 수를 받음
  // --> 받은 요소와 배열이 같으면 요소의 인덱스 번호 반환 
  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;
};

'codes > daily coding' 카테고리의 다른 글

23_bubbleSort  (0) 2022.12.22
21_largestProductOfThree  (0) 2022.12.21
22_fibonacci  (0) 2022.12.20
19_decryptCaesarCipher  (0) 2022.12.11
18_numberSearch  (0) 2022.12.11