Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

csct3434

[level 2] 할인 행사 - 131127 본문

프로그래머스

[level 2] 할인 행사 - 131127

csct3434 2024. 2. 29. 03:30

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.HashMap;
import java.util.Map;

class Solution {

    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;

        Map<String, Integer> wantsCount = new HashMap<>();
        for (int i = 0; i < want.length; i++) {
            wantsCount.put(want[i], number[i]);
        }

        HashMap<String, Integer> discountsCount = new HashMap<>();
        for (int i = 0; i < 10; i++) {
            Integer count = discountsCount.getOrDefault(discount[i], 0);
            discountsCount.put(discount[i], count + 1);
        }

        for (int i = 0; i + 10 <= discount.length; i++) {
            boolean impossible = wantsCount.keySet()
                .stream()
                .anyMatch(item -> wantsCount.get(item) > discountsCount.getOrDefault(item, 0));

            if (!impossible) {
                answer++;
            }
            
            if (i + 10 < discount.length) {
                Integer oldestItemCount = discountsCount.get(discount[i]);
                discountsCount.put(discount[i], oldestItemCount - 1);

                Integer nextItemCount = discountsCount.getOrDefault(discount[i + 10], 0);
                discountsCount.put(discount[i + 10], nextItemCount + 1);
            }
        }

        return answer;
    }
}