toy3

이영광·2021년 8월 15일
0

알고리즘

목록 보기
7/16

두 개의 배열(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 요소가 없기에 부분집합임을 확정한후

트루를 리턴한다

profile
《REACT》《JAVASCRIPT 》 만지고있어욤

0개의 댓글