📝문제 설명
- 내가 사고 싶은 물건이 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 메서드를 찾아보며 풀었다..
'📖Algorithm > Sliding Window' 카테고리의 다른 글
자바 [Algorithm] 슬라이딩 윈도우 - 백준 11465 소가 길을 건너간 이유 5 (0) | 2024.05.29 |
---|