정현이가 원하는 제품을 나타내는 문자열 배열 want와 정현이가 원하는 제품의 수량을 나타내는 정수 배열 number, XYZ마트에서 할인하는 제품을 나타내는 문자열 배열 discount가 주어졌을 때, 회원등록시 정현이가 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 return하는 solution 함수를 작성하는 문제이다.
HashMap을 사용하여 풀 수 있는 문제였다. HashMap형의 map의 key에는 want배열에 저장된 '제품이름'을 저장하고 value에는 number배열에 저장된 '원하는 제품의 수량'을 저장한다. for문을 통해 열흘동안 할인하는 제품이 map에 key값으로 존재하는지 확인한 후에 해당 키 값에 저장된 value에서 -1을 한다. for문이 끝난 후에 다시 '제품이름'을 검색하여 값이 0이 아니라면 모두 할인 받을 수 없다고 판단한다. '제품이름'을 검색한 값이 모두 0이라면 answer에 1을 더하고, map에 다시 '원하는 제품의 수량' 값을 넣어주고 다음 날을 탐색하였다.
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < want.length; i++) {
map.put(want[i], number[i]);
}
for (int i = 0; i <= discount.length - 10; i++) {
for (int j = i; j < i + 10; j++) {
if (map.containsKey(discount[j])) {
map.put(discount[j], map.get(discount[j]) - 1);
}
}
boolean find = true;
for (int j = 0; j < want.length; j++) {
if (map.get(want[j]) != 0) {
find = false;
break;
}
}
if (find) {
answer++;
}
for (int j = 0; j < want.length; j++) {
map.put(want[j], number[j]);
}
}
return answer;
}
}