base, sample
sample와 base을 다 돌면서 일치하는지 여부를 따지는 것은 의미가 없다
너무 오래 걸리니까 : m*n
그러므로 이진탐색을 이용한다
1. base, sample을 sorting
2. base를 2로 나눠서 sample의 첫번째와 중간값과 비교
작으면 base를 4로 나눠서 비교
=> 이렇게 /2를 반복적으로 사용할 수 있도록 재귀함수를 쓴다
1번의 base, sample과 middle을 인자로 받는 새로운 함수 선언 (재귀함수)
함수 내용은 반복되는 행위
:middle =base.length/2
sample의 요소와 비교 (sample도 for문을 돌아야)
같으면 sample에서 요소 삭제
작으면 다시 반드로 나눠서
하나라도 안 맞으면 false
function match(middle, base, s){
if(base[middle] === s){
return true
}else if(base[middle] < s){
return match(middle/2, base,s)
}else if(base[middle] >s){
return match(middle+middle/2, base, s)
}
}
let b = true
let middle = base/2
for(let s of sample){
b = b && match(middle, base,s)
if(b === false) break;
}
return b