[ハッシュ]レベル2(フィート.ケースの数)に偽装



可以看到


問題の説明


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

せいげんじょうけん

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


    clothesreturn[["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]5[["crowmask", "face"], ["bluesunglasses", "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

    に答える


    これはすべての組合せの場合の数の問題です.
    問題を見ると上着やズボン、靴など.誰もがきちんと着なければならないわけではない.
    上着を着ないで、下着を着ないで、靴を履くしかありません.
    そのため、上着、下衣、靴の場合、1枚は着用しません.
    例えば、上着2枚、下着2枚、靴1足です.
    (2+1)x(2+1)x(1+1).
    でも着ない場合はないので、全体的には衣数で-1で大丈夫です.

    コード1

    function solution(clothes) {
        var answer = 1;
        var obj={};
        for(var i=0;i<clothes.length;i++){
            obj[clothes[i][1]] =0;
        }
        for(var i=0;i<clothes.length;i++){
            obj[clothes[i][1]] += 1;
        }
    
        for(var key in obj){
            answer *= obj[key]+1
        }
        
        return answer-1;
    }

    コード2

    function solution(clothes) {
        const map = {}
        
        clothes.forEach((set) => {
            map[set[1]] ? map[set[1]]++ : map[set[1]] = 1
        })
        
        const res = Object.values(map).reduce((res, n) => res * (n + 1), 1)
        
        return res - 1
    }