const-tommy.dev
기록을 불러오는 중입니다
wantMap을 만들어서 {품목: 수량} 형태로 세팅한다.discount 배열을 10개씩 끊어서 확인하면 되겠다.
discount.length - 10)까지만 반복문을 돌린다.currentMap을 새로 만들어서 실시간 할인 현황을 파악한다.wantMap(기준)과 currentMap(현재)을 비교해서 수량이 딱 맞으면 정답 카운트를 올린다.
isMatch 함수를 만들어 모든 품목의 수량이 일치하는지 체크한다./*
discount 배열을 끊어서 구간 안에 want * number가 충족이 되는지 ?
해시맵을 사용하여 want에 value를 돌면서 해시의 각 key값을 설정하고
discount를 돌면서(가능 횟수만큼) 해당 영역에 number를 충족하는지
*/
function solution(want, number, discount) {
let answer = 0;
const wantMap = new Map();
want.forEach((item, idx) => {
wantMap.set(item, number[idx]);
});
for (let i = 0; i <= discount.length - 10; i++) {
const currentMap = new Map();
for (let j = i; j < i + 10; j++) {
const item = discount[j];
currentMap.set(item, (currentMap.get(item) || 0) + 1);
}
if (isMatch(wantMap, currentMap)) {
answer++;
}
}
return answer;
}
function isMatch(targetMap, currentMap) {
for (const [key, value] of targetMap) {
if (currentMap.get(key) !== value) {
return false;
}
}
return true;
}10 ≤ discount의 길이 ≤ 100,000 에 의해서 최대 10번을 돌기에 O(N)으로 문제해결을 충족