문제
https://school.programmers.co.kr/learn/courses/30/lessons/131127
아이디어
마트에서 일별로 할인 판매하는 제품을 나타내는 discount
배열을 0
부터 discount.length - 10
까지 순회하면서 해당 i
날짜에 마트에 등록했을 때 원하는 상품을 정확하게 구매할 수 있는지를 체크한다. 만약 그렇다면 카운트 answer
를 증가한다.
특정 날짜에 등록이 가능한지를 파악하는 로직
Map
자료구조를 생성한다.i
부터 시작해서10
번째 이후의 날까지 마트에서 판매하는 상품의 갯수를 저장한다.- 정현이가 원하는 상품과 일치하다면
true
를, 하나라도 틀리다면false
를 반환한다.
소스코드
function canRegisterAt(idx, want, number, discount) {
const hash = new Map();
for (let i = idx; i < idx + 10; i++) {
const item = discount[i];
hash.set(item, (hash.get(item) || 0) + 1);
}
for (let i = 0; i < want.length; i++) {
if (hash.get(want[i]) !== number[i]) return false;
}
return true;
}
function solution(want, number, discount) {
var answer = 0;
for (let i = 0; i <= discount.length - 10; i++) {
if (canRegisterAt(i, want, number, discount)) {
answer++;
}
}
return answer;
}