[Programmers](高得点KIT)ハッシュ-偽装


https://programmers.co.kr/learn/courses/30/lessons/42578
問題の説明
スパイたちは毎日違う服を着て自分を偽装している.
例えば、スパイの服が以下のように、今日スパイが丸い眼鏡、長いコート、青い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
Solution
#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    unordered_map<string, int> uom;
    for(auto i : clothes) uom[i[1]]++;
    for(auto i : uom) answer *= (i.second + 1);
    return answer-1;
}
入力データを見てみましょう.[["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]例に示すように、1番目次は衣類の種類であり、0番目次は衣類である.すなわち、headgearは、yellowhatgreen_turbanであってもよい.
つまり、服の種類によって、可能な限りのことを貯蔵し、すべてのことを乗算します.1を乗じた理由は、相応の服を着ないからです.
最後の答えから1を引いた理由は、何も着ていない場合を除く.
Hashing問題が頻繁に発生しすぎて、よく知らなければならない問題です.