원하는 제품의 수량을 나타내는 정수 배열 number, XYZ 마트에서 할인하는 제품을 나타내는 문자열 배열 discount가 주어졌을 때, 회원등록시 정현이가 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 return 하는 solution 함수를 완성하시오. 가능한 날이 없으면 0을 return 합니다.
want의 길이 = number의 길이 ≤ 10
number의 원소 ≤ 10number[i]는 want[i]의 수량을 의미하며, number의 원소의 합은 10입니다.discount의 길이 ≤ 100,000want와 discount의 원소들은 알파벳 소문자로 이루어진 문자열입니다.
want의 원소의 길이, discount의 원소의 길이 ≤ 12| want | number | discount | result |
|---|---|---|---|
| ["banana", "apple", "rice", "pork", "pot"] | [3, 2, 2, 2, 1] | ["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"] | 3 |
| ["apple"] | [10] | ["banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana"] | 0 |
입출력 예 #1
입출력 예 #2
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
// 원하는 아이템 별 갯수 맵핑
HashMap <String, Integer> map = new HashMap <> ();
for (int i = 0; i < number.length; i ++) {
map.put(want[i], number[i]);
}
// 시작일
int idx = 0;
// 모두 할인받은 횟수
int count = 0;
// 할인 배열 길이 - 원하는 목록 길이 까지만 반복
// 남은 일 수가 원하는 목록보다 작으면 (1, 1, ... , 1) 인 경우에도 만족을 하지 못한다.
while (idx <= discount.length - want.length) {
// 회차별 맵핑 자료구조 초기화
HashMap <String, Integer> buffer = new HashMap<>(map);
// 회원 할인은 10일동안 진행된다.
for (int i = idx; i < idx + 10; i ++) {
// 인덱스 넘어가면 break
if (i == discount.length) break;
String name = discount[i];
if (buffer.containsKey(name)) {
buffer.put(name, buffer.get(name) - 1);
}
}
int check = 0;
for (String s : buffer.keySet()) {
if (buffer.get(s) <= 0) check ++;
}
if (check == buffer.size()) count ++;
idx ++;
}
return count;
}
}