

나의 풀이
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
for (int i = 0; i <= discount.length - 10; i++) { // 1
HashMap<String, Integer> map = new HashMap<>();
for (int j = 0; j < want.length; j++) { // 2
map.put(want[j], number[j]);
}
for (int j = i; j < 10 + i; j++) {
String key = discount[j];
if (map.containsKey(key)) {
int temp = map.get(key);
if (temp > 1) { // 3
map.put(key, temp - 1);
} else {
map.remove(key);
}
}
}
if (map.isEmpty()) answer++; // 4
}
return answer;
}
}
과정
- 10일 동안 회원 자격을 부여하니까 10일 동안의 할인 상품들을 확인할 때 배열의 범위를 초과하는 것을 방지하기 위한 반복문 조건 설정
- map함수에 want와 number를 키 밸류로 가지도록 삽입
- discount[j]를 키로 가지는 밸류의 값이 1 이상이라면 -1을 해주고, 아니면 삭제해준다
- 반복문이 끝났을 때 map이 비어있다면 answer을 증가
다른 사람 풀이
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
ArrayList<String> list = new ArrayList<>();
for (int i=0; i<want.length; i++) {
while (number[i]-- > 0) {
list.add(want[i]);
}
}
for (int i=0; i<discount.length-list.size()+1;i ++) {
ArrayList<String> l = (ArrayList<String>) list.clone();
for (int j=i; j<i+list.size(); j++) {
if (l.contains(discount[j])) {
l.remove(discount[j]);
} else {
break;
}
}
answer += l.size()==0 ? 1 : 0;
}
return answer;
}
}