[문제설명]

문자열 S와 이름 배열 L이 주어진다. 문자열 S의 문자들로 주어진 배열의 각 이름을 몇개나 만들 수 있을지 세어보고 최대 제작가능 횟수를 반환한다. S=LILLYBILLYBOO, L=[‘BILL’, ‘MARIA’, ‘LILLY’] 일때 BILL은 2번, MARIA는 0번, LILLY는 1번 만들 수 있다. 따라서 2를 반환해야 한다.


✅ 문제 요약

목표:


🧠 핵심 아이디어

  1. S의 각 문자 개수를 세어 저장
  2. L의 각 이름마다:
  3. 그 중 최대 횟수를 반환

✅ 자바스크립트 코드

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;
}


🧪 예시 실행