[프로그래머스] 할인 행사

Narcoker·2022년 11월 25일
0

코딩테스트

목록 보기
58/150

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131127

풀이

사고하는 물품을 key, 개수를 value로 하여 map을 생성한다.
당일부터 10일 동안 할인하는 제품을 key, 개수를 value로 하여
map을 생성한다.

만약 사고자하는 물품의 목록이랑 개수가 정확히 일치한다면
answer 값을 1 증가시킨다.

function solution(want, number, discount) {
    function canSignUp(discountCount) {
        for (let name of wantMap.keys()) {
            if (!discountCount.has(name)) return false;
            if (discountCount.get(name) !== wantMap.get(name)) return false;
        }
        return true;
    }

    let answer = 0;
    let canSignUpDays = discount.length - 10 + 1;
    let wantMap = want.reduce((res, item, i) => {
        res.set(item, number[i]);
        return res;
    }, new Map());

    for (let day = 0; day < canSignUpDays; day++) {
        let itemNames = discount.slice(day, day + 10);
        let discountCount = itemNames.reduce((res, item) => {
            res.set(item, res.get(item) + 1 || 1);
            return res;
        }, new Map());

        if (canSignUp(discountCount)) answer++;
    }
    return answer;
}
profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글