function solution(want, number, discount) {
// discount에서 want에 있는 목록이 number만큼 10 연속으로 있는지 확인 필요
// discount를 10개씩 슬라이스
// 슬라이스 한 배열의 요소를 shift해서 want에 있으면, 해당 요소의 인덱스를 number에서 찾아 -1
// number이 모두 0이 되면 count+1 < number의 요소에 0 아닌 값이 있으면 X
// return 할 일 수
let count = 0;
// discount를 10개씩 자르기 위한 반복문
for(let i = 0; i<discount.length; i++){
// 잘랐을 때 10개 이하가 되는 경우 반복문 탈출
if(i+10 > discount.length) break;
// 10개씩 자르기
let turm = discount.slice(i, i+10);
// 자른 배열과 비교할 number 배열 복사
let newNum = number.slice();
for(let j=0; j<=10; j++){
const item = turm.shift()
let idx = want.indexOf(item)
// 꺼낸 turm의 요소가 want에 있는 품목일 경우
if(idx !== -1){
newNum[idx] = newNum[idx]-1;
}
}
// newNum에 0이 아닌 요소가 없는 경우
// (0이 아닌 요소만 꺼낸 배열의 길이가 0인 경우)
if(!newNum.filter((ele)=> ele !== 0).length){
count++;
}
}
return count;
}
function solution(want, number, discount) {
let count = 0;
for (let i = 0; i < discount.length - 9; i++) {
const slice = discount.slice(i, i+10);
let flag = true;
for (let j = 0; j < want.length; j++) {
if (slice.filter(item => item === want[j]).length !== number[j]) {
flag = false;
break;
}
}
if (flag) count += 1;
}
return count;
}
하나하나 비교하는 것이 아니라 10개씩 자른 배열에 filter를 해서 나온 아이템의 수와 number에서 요구하는 수가 같을 경우 count를 올리는 식을 사용하셨다