[プログラマー高得点Kit]ハッシュ偽装(level 2)


問題を解く


スパイたちは毎日違う服を着て自分を偽装している.
例えば、スパイの服が以下のように、今日スパイが丸い眼鏡、長いコート、青いTシャツを着ている場合は、翌日はジーンズを追加したり、黒いサングラスをかけたりして、丸い眼鏡ではありません.

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

    [IO例説明]
    例1
    headgearに対応した服装は黄色hat、緑turban、眼鏡に対応した服装は青サングラスで、以下の5つの組み合わせが可能です.

    例2
    Faceに対応した服装はcrow mask,blue sunglasse,mocky paskであり,以下の3つの組み合わせが可能である.

    問題を解く


    コード#コード#

    function solution(clothes) {
        let answer=0;
        let map=new Map();
        for(let i=0; i<clothes.length; i++){
            if(map.has(clothes[i][1])) map.set(clothes[i][1], map.get(clothes[i][1])+1);
            else map.set(clothes[i][1], 1);
        }
    
        let tmp=1; 
        for(let [key, val] of map){
            tmp*=(val+1);
        }
        answer=tmp-1;
        return answer;
    }
    組み合わせをよく考えなければならない.トップス2枚、ボトムス1枚と言うのであれば、トップス21枚とボトムス1枚ずつ着なければなりません.しかし、この問題においても、上着または下衣のうち1つしかない場合を考慮し、(2+1)(1+1)=6のうち、2つとも入らない場合はないので、6-1とする.

    リファレンス


    https://im-developer.tistory.com/128