문제
https://school.programmers.co.kr/learn/courses/30/lessons/131127
접근 방법 및 풀이
구매하고자 하는 목록과 해당 물건의 구매 개수는 Map에 저장
마트의 할인 목록의 길이를 N이라고 했을 때 i를 할인 항목의 0번째 부터 N - 10까지 반복하면서 할인 항목과 할인 항목의 개수를 취합하여 구매하고자 하는 물건의 개수보다 같거다 큰 경우 마트 가입 가능 날짜라고 판단하고 가입 가능 날짜의 수를 반환
import java.util.HashMap;
import java.util.Map;
public class Q30_131127 {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
Map<String, Integer> wantMap = new HashMap<>();
int wantLength = want.length;
for (int i = 0; i < wantLength; i++) {
wantMap.put(want[i], number[i]);
}
int discountLength = discount.length;
for (int i = 0; i <= discountLength - 10; i++) {
Map<String, Integer> discountMap = new HashMap<>();
for (int j = 0; j < 10; j++) {
String item = discount[i + j];
int count = discountMap.getOrDefault(item, 0);
count++;
discountMap.put(item, count);
}
boolean isSignup = true;
for (String wantItem : wantMap.keySet()) {
int wantCount = wantMap.get(wantItem);
int discountCount = discountMap.getOrDefault(wantItem, 0);
if (wantCount > discountCount) {
isSignup = false;
break;
}
}
if (isSignup) {
answer++;
}
}
return answer;
}
}