[プログラマー]ハッシュ-偽装



プログラマー-偽装

問題の説明


スパイが持っている異なる服の組み合わせの数を返します

せいげんじょうけん


スパイが持っている服の数は1着以上30着以下.
すべての文字列の長さが1または20以下の自然数です.
すべての文字列は、アルファベット小文字または小文字のみで構成されます.
スパイは毎日少なくとも1枚の服を着ている.

問題を解く


服の種類を分けて地図を作る.△帽子と上着と下着の間に分かれている.
mapではkeyは服の種類、valueは種類の個数です.
各数+1の値に乗算します.
プラス1の理由は、この種類の服を選ばない場合も含めて!
結果的に1を外すと、何も着ないことを排除します.

コード#コード#

#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    map <string, int> Clothes;
    vector<string> clothesKinds;
    
    for(int i=0; i<clothes.size(); i++){
        if(Clothes[clothes[i][1]] == 0){
            Clothes[clothes[i][1]] = 1;
            clothesKinds.push_back(clothes[i][1]);
        }
        else{
            Clothes[clothes[i][1]]++;
        }
    }
    
    map <string, int>::iterator iter; 
    for(iter=Clothes.begin(); iter!=Clothes.end(); iter++){
        answer*=iter->second+1;
    }

    return answer-1;
}

時間の複雑さ


Θ(N)

解答時のコメントサイト


mapコンテナのクリーンアップと使用方法
vectorコンテナのクリーンアップと使用方法