본문 바로가기
Algorithm/프로그래머스

[Algorithm / Programmers] 할인 행사

by newtownboy 2024. 4. 7.


[Version]
⦁ 2024.04.07 / [Algorithm / Programmers] 할인 행사

 

import java.util.*;

class Solution {
    public int solution(String[] wantedItems, int[] wantedQuantities, String[] discounts) {
        int answer = 0;
        int totalCount = Arrays.stream(wantedQuantities).sum();
        
        Map<String, Integer> wantedMap = createMap(wantedItems, wantedQuantities);
        
        for (int i = 0; i <= discounts.length - totalCount; i++) {
            Map<String, Integer> currentMap = new HashMap<>(wantedMap);
            
            for (int j = i; j < i + totalCount; j++) {
                String discountedItem = discounts[j];
                if (!currentMap.containsKey(discountedItem)) {
                    break;
                }         
                int count = currentMap.get(discountedItem);
                if (count <= 0) {
                    break;
                }
                currentMap.put(discountedItem, count - 1);
            }
            
            if (isAllSold(currentMap)) {
                answer++;
            }
        }
        
        return answer;
    }
    
    private Map<String, Integer> createMap(String[] keys, int[] values) {
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < keys.length; i++) {
            map.put(keys[i], values[i]);
        }
        return map;
    }
    
    public static boolean isAllSold(Map<String, Integer> map) {
        return map.values().stream().allMatch(count -> count == 0);
    }
}