문자열 S와 이름 배열 L이 주어진다. 문자열 S의 문자들로 주어진 배열의 각 이름을 몇개나 만들 수 있을지 세어보고 최대 제작가능 횟수를 반환한다. S=LILLYBILLYBOO, L=[‘BILL’, ‘MARIA’, ‘LILLY’] 일때 BILL은 2번, MARIA는 0번, LILLY는 1번 만들 수 있다. 따라서 2를 반환해야 한다.
S: 예: "LILLYBILLYBOO"L: 예: ["BILL", "MARIA", "LILLY"]S의 각 문자 개수를 세어 저장L의 각 이름마다:
S로 몇 번 만들 수 있는지 계산function solution(S, L) {
// 1. S의 문자 빈도 수 세기
const sCount = {};
for (const char of S) {
sCount[char] = (sCount[char] || 0) + 1;
}
let maxCount = 0;
for (const name of L) {
// 2. 각 이름의 문자 빈도 수 세기
const nameCount = {};
for (const char of name) {
nameCount[char] = (nameCount[char] || 0) + 1;
}
// 3. 이름을 만들 수 있는 최대 횟수 계산
let possible = Infinity;
for (const char in nameCount) {
if (!sCount[char]) {
possible = 0;
break;
} else {
// s에 있는 문자 개수 / 이름에서 필요한 개수
possible = Math.min(possible, Math.floor(sCount[char] / nameCount[char]));
}
}
maxCount = Math.max(maxCount, possible);
}
return maxCount;
}