본문 바로가기
코딩테스트/LV. 2

LV.2 :: 할인 행사

by KUROMI98 2025. 2. 21.

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

function solution(want, number, discount) {
    let answer = 0;

    // 원하는 제품과 수량을 Map으로 저장
    const wantedItems = new Map();
    for (let i = 0; i < want.length; i++) {
        wantedItems.set(want[i], number[i]);
    }

    // 슬라이딩 윈도우로 10일씩 확인
    let currentCount = new Map();
    for (let i = 0; i < 10; i++) {
        currentCount.set(discount[i], (currentCount.get(discount[i]) || 0) + 1);
    }

    for (let i = 0; i <= discount.length - 10; i++) {
        // 원하는 제품 수량 일치 여부 체크
        let isMatch = true;
        for (let [item, count] of wantedItems) {
            if (currentCount.get(item) !== count) {
                isMatch = false;
                break;
            }
        }

        if (isMatch) {
            answer++;
        }

        // 슬라이딩 윈도우로 한 칸씩 이동
        if (i + 10 < discount.length) {
            const removeItem = discount[i];
            const addItem = discount[i + 10];
            currentCount.set(removeItem, currentCount.get(removeItem) - 1);
            currentCount.set(addItem, (currentCount.get(addItem) || 0) + 1);
        }
    }

    return answer;
}

'코딩테스트 > LV. 2' 카테고리의 다른 글

LV2 :: 행렬의 곱셈  (0) 2025.02.21
LV.2 :: 괄호 회전하기  (0) 2025.02.21
LV.2 :: 귤 고르기  (0) 2025.02.21
LV.2 :: 주식 가격  (0) 2024.10.21
LV.2 :: n^2 배열 자르기  (0) 2024.10.21

댓글