に見せかける


問題の説明


スパイたちは毎日違う服を着て自分を偽装している.
例えば、スパイの服が以下のように、今日スパイが丸い眼鏡、長いコート、青いTシャツを着ている場合は、翌日はジーンズを追加したり、黒いサングラスをかけたりして、丸い眼鏡ではありません.
顔が丸いメガネ、黒いサングラスに青いTシャツのジーンズコートロングコート
スパイが持っている服に二次元配列の服が与えられた場合、異なる服の組み合わせの数を返すために解関数を作成します.

せいげんじょうけん

  • 服装の各行は「服装名、服装種類」からなる.
  • スパイが持っている服の数は1着以上30着以下.
  • のような名前の服は存在しません.
  • アパレルのすべての要素は文字列から構成されています.
  • すべての文字列の長さは、1または20未満の自然数であり、アルファベット小文字または「」のみから構成されます.
  • スパイは毎日少なくとも1枚の服を着ている.
  • I/O例


    clothesreturn[[yellow_hat, headgear], [blue_sunglasses, eyewear], [green_turban, headgear]]5[[crow_mask, face], [blue_sunglasses, face], [smoky_makeup, face]]3

    I/O例説明

  • 例#1
    headgearに対応した服装は黄色hat、緑turban、眼鏡に対応した服装は青サングラスで、以下の5つの組み合わせが可能です.
  •  1. yellow_hat
     2. blue_sunglasses
     3. green_turban
     4. yellow_hat + blue_sunglasses
     5. green_turban + blue_sunglasses
  • 例#2
    Faceに対応した服装はcrow mask,blue sunglasse,mocky paskであり,以下の3つの組み合わせが可能である.
  •   1. crow_mask
      2. blue_sunglasses
      3. smoky_makeup

    👤 私の答え

    function solution(clothes) {
      let category = clothes.reduce((a,c) => {
        a[c[1]] = (a[c[1]]) ? a[c[1]] + 1 : 1;
        return a
      },{})
    
      let item = Object.values(category);
    
      if(item.length === 1) item[0] // 종류가 모두 같을 경우.
    
      let result = 1;
      item.map(a => result *= (a+1)) // 경우의 수
    
      return result - 1; // 아무 것도 입지 않은 경우는 존재하지 않으므로 -1 해준다.
    }
    
    console.log(solution([['yellow_hat', 'headgear'], ['blue_sunglasses', 'eyewear'], ['green_turban', 'headgear']]));

    解答方法


  • 鍵で服装の種類を整理して、数えました.{headgear:2,eyewear:1}

  • 最初はどのように使うか分からなかったのですが、後で利用状況の数を発見すればいいのです.
    したがってcategoryはvalue([2,1])の値しか与えられなかったが、所望の答えは与えられなかった.
    2 x 1 = 3 (..?)

  • すべての服を一度に着るわけではありません.
  •  1. yellow_hat
     2. blue_sunglasses
     3. green_turban
     그렇기 때문에 
     (2+1) x (1+1) = 6
  • は少なくとも1着以上の条件があるので、マイナス1の値を返送すればよい.
  • リファレンス
    何が境遇の義秀ですか。
    reduceの使用
    code playgroundを参照してアルゴリズムを解いた.