
내가 작성한 코드
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
// 총 할인 일 수에서 10일을 뺀 만큼 반복
for(int i = 0; i <= discount.length - 10; i++) {
Map<String, Integer> cartMap = new HashMap<>(); // 장바구니 맵
// 장바구니에 물품, 수량을 넣기
for (int j = 0; j < want.length; j++) {
cartMap.put(want[j], number[j]);
}
// 시작일 부터 10일 동안 할인된 물품을 확인
// 만약 장바구니에 있는 물품이 할인된 물품이라면 수량을 1 감소
for (int j = i; j < i + 10; j++) {
String item = discount[j];
if (cartMap.containsKey(item)) {
cartMap.put(item, cartMap.get(item) - 1);
}
}
// 장바구니에 있는 물품의 수량이 모두 0 이하라면 answer 증가
if (cartMap.values().stream().allMatch(count -> count <= 0)) {
answer++;
}
}
return answer;
}
}
다른 사람의 코드
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
ArrayList<String> list = new ArrayList<>(); // 장바구니 리스트
// number만큼 want를 장바구니에 담기
for (int i = 0; i < want.length; i++) {
while (number[i]-- > 0) {
list.add(want[i]);
}
}
// // 총 할인 일 수에서 list.size()(10일)을 뺀 만큼 반복
for (int i = 0; i < discount.length - list.size() + 1; i++) {
ArrayList<String> l = new ArrayList<>(list); // 장바구니 리스트를 복사
// 시작일부터 list.size()만큼의 할인 상품이 있는지 확인
for (int j = i; j < i + list.size(); j++) {
if (l.contains(discount[j])) { // 상품이 있으면 장바구니에서 제거
l.remove(discount[j]);
} else { // 상품이 없으면 break
break;
}
}
answer += l.size() == 0 ? 1 : 0;
}
return answer;
}
}
Share article