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


제한사항


입출력 예

want number discount result
["banana", "apple", "rice", "pork", "pot"] [3, 2, 2, 2, 1] ["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"] 3
["apple"] [10] ["banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana"] 0

입출력 예 설명

입출력 예 #1

입출력 예 #2

풀이

import java.util.*;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        // 원하는 아이템 별 갯수 맵핑
        HashMap <String, Integer> map = new HashMap <> ();
        
        for (int i = 0; i < number.length; i ++) {
            map.put(want[i], number[i]);
        }
        
        // 시작일
        int idx = 0;
        // 모두 할인받은 횟수
        int count = 0;
        
        // 할인 배열 길이 - 원하는 목록 길이 까지만 반복
        // 남은 일 수가 원하는 목록보다 작으면 (1, 1, ... , 1) 인 경우에도 만족을 하지 못한다.
        while (idx <= discount.length - want.length) {
            // 회차별 맵핑 자료구조 초기화
            HashMap <String, Integer> buffer = new HashMap<>(map);
            
            // 회원 할인은 10일동안 진행된다.
            for (int i = idx; i < idx + 10; i ++) {
                // 인덱스 넘어가면 break
                if (i == discount.length) break;
                
                String name = discount[i];
                
                if (buffer.containsKey(name)) {
                    buffer.put(name, buffer.get(name) - 1);
                }
            }
            
            int check = 0;
            
            for (String s : buffer.keySet()) {
                if (buffer.get(s) <= 0) check ++;
            }
            
            if (check == buffer.size()) count ++;
                
            idx ++;
        }
        
        return count;
    }
}