[코딩테스트] 프로그래머스 할인 행사 (JavaScript)

Jake·2022년 11월 27일
0

문제 설명

XYZ 마트에서는 회원을 대상으로 매일 한 가지 제품을 할인하는 행사를 합니다. 할인하는 제품은 하루에 하나씩만 구매할 수 있습니다. 정현이는 자신이 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치할 경우에 맞춰서 회원가입을 하려 합니다.

정현이가 원하는 제품을 나타내는 문자열 배열 want와 정현이가 원하는 제품의 수량을 나타내는 정수 배열 number, XYZ 마트에서 할인하는 제품을 나타내는 문자열 배열 discount가 주어졌을 때, 회원등록시 정현이가 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 return 하는 solution 함수를 완성하시오. 가능한 날이 없으면 0을 return 합니다.

풀이

function solution(want, number, discount) {
    let result = 0;
    const wantLength = want.length;
    const bucket = new Map();
    
    const checker = () => {
        for (let i = 0; i < wantLength; i++) {
            if (bucket.get(want[i]) !== number[i]) return;
        }
        
        result += 1;
    }
    
    for (let i = 0; i <= 9; i++) {
        const target = discount[i];
        
        if (bucket.has(target)) bucket.set(target, bucket.get(target) + 1);
        else bucket.set(target , 1);
    }
    
    checker();
    
    for (let i = 10; i < discount.length; i++) {
        bucket.set(discount[i - 10], bucket.get(discount[i - 10]) - 1);
        
        if (bucket.has(discount[i])) bucket.set(discount[i], bucket.get(discount[i]) + 1);
        else bucket.set(discount[i], 1);
        
        checker();
    }
    
    return result;
}

결과

0개의 댓글