function solution(want, number, discount) {
let answer = 0;
let li = {};
for (let i = 0; i < want.length; i++) {
li[want[i]] = number[i];
}
const liArr = Object.entries(li).sort();
let ct = {};
for (let i = 0; i <= discount.length - 10; i++) {
[...discount.slice(i, i + 10)].map((v) => {
if (ct[v]) ct[v]++;
else ct[v] = 1;
});
const ctArr = Object.entries(ct).sort();
let flag = true;
for (let k = 0; k < liArr.length; k++) {
if (liArr[k][0] !== ctArr[k][0] || liArr[k][1] !== ctArr[k][1])
flag = false;
}
if (flag) answer++;
ct = {};
}
return answer;
}
console.log(
solution(
["banana", "apple", "rice", "pork", "pot"],
[3, 2, 2, 2, 1],
[
"chicken",
"apple",
"apple",
"banana",
"rice",
"apple",
"pork",
"banana",
"pork",
"rice",
"pot",
"banana",
"apple",
"banana",
]
)
);
want,number 배열을 순회하면서
배열[want]=number 형태로 객체 li를 생성한다.
discount 배열을 순회하면서(discount.length-10만큼 순회한다),
비교할 때 entries로 굳이 배열을 또 만들어서 메모리 낭비하지 않고 for in을 사용하니 런타임 에러를 해결할 수 있었다.
function solution(want, number, discount) {
let answer = 0;
let li = {};
for (let i = 0; i < want.length; i++) {
li[want[i]] = number[i];
}
let ct = {};
for (let i = 0; i <= discount.length - 10; i++) {
[...discount.slice(i, i + 10)].map((v) => {
if (ct[v]) ct[v]++;
else ct[v] = 1;
});
let flag = true;
for (let x in li) {
if (!ct[x] || ct[x] !== li[x]) {
flag = false;
continue;
}
}
if (flag) answer++;
ct = {};
}
return answer;
}
console.log(
solution(
["banana", "apple", "rice", "pork", "pot"],
[3, 2, 2, 2, 1],
[
"chicken",
"apple",
"apple",
"banana",
"rice",
"apple",
"pork",
"banana",
"pork",
"rice",
"pot",
"banana",
"apple",
"banana",
]
)
);