📝문제 설명

 

 

- 내가 사고 싶은 물건이 10일동안 연속으로 다 있으면 OK인 문제

- 여기서 핵심은 연속으로 존재한다는 것이다.

- 14일중 10일이 연속으로 나타나면 되는거니 슬라이딩 윈도우 개념을 사용해서 풀었다.


📢입출력 예시

 


✏️문제 풀이

import java.util.*;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;
        
        HashMap<String, Integer> myMap = new HashMap<String, Integer>();
        
        //해쉬맵에 값 넣기
        for(int i=0; i<want.length; i++){
            myMap.put(want[i], number[i]);
        }
        
        //슬라이딩 윈도우 시작
        for(int i=0; i<=discount.length-10; i++){
            HashMap<String, Integer> currentMap = new HashMap<String, Integer>(myMap);
            
            // 현재 10일간 검사
            for(int j=i; j< i+10; j++){
                String item = discount[j];
                if(currentMap.containsKey(item)){
                    currentMap.put(item, currentMap.get(item) - 1);
                }
            }
            
            boolean allZero = true;
            for(Integer value : currentMap.values()){
                if(value > 0){
                    allZero = false;
                    break;    
                }
            }
            
            if(allZero){
                answer++;
            }
        }

        
        return answer;
    }
}

 

- 슬라이딩 윈도우 하려면 총 5번의 회수가 필요하다.

- 5번돌 동안 윈도우 크기 안에 10번을 반복적으로 검사하며

- 그 날의 할인 품목이 내가 사고 싶은 물건에 포함되면 물건의 value값을 -1 시켜주었다.

- 슬라이딩 윈도우가 끝나면 전체 value값이 0인지 검사해주고

- 전체 value값이 0이라면 다 살 수 있다는 의미로 answer++를 해준다.

- 그리고 다음 윈도우로 넘어갈 때는 꼭 value값을 원상복구 시켜주어야 한다.


💡새로 알게된 점

HashMap 자료구조에 익숙하지 않아서 HashMap 메서드를 찾아보며 풀었다..