각 종류의 옷이 주어지는 데 서로 중복되지 않고 입을 수 있는 수를 찾으면 된다. 너무 어렵게 생각할 필요 없다. 고등학교 시절 배운 확률과 통계를 생각하면 간단하다. 상의가 2벌 하의가 3벌 있다면 2C1 * 3C1 총 6개가 된다. 하지만 이 경우 선택하지 않음 도 있으니 각 요소에다가 +1을 해준 다음 중복되는 값인 -1을 해주면 된다.
해시로 분류가 되어 있기에 umordered_map을 이용해 줬다. answer에는 1을 넣고(0을 넣으면 계속 0만 나온다) unordered_map인 m에다가 key는 옷의 종류를 넣어주고 같은 종류가 나올 겅우 +1을 해준다. 다음 위에서 설명했던 거처럼 종류에 따른 옷의 수만큼 1씩 더해줘서 곱해주면 된다. 그다음 정답에 -1을 빼주면 된다.
#include <string>
#include <vector>
#include<unordered_map>
#include<iostream>
using namespace std;
int solution(vector<vector<string>> clothes) {
int answer = 1;
unordered_map<string, int> m;
for(int i=0; i<clothes.size(); i++){
m[clothes[i][1]] += 1;
}
for(auto i = m.begin(); i != m.end(); i++){
answer = answer * (i->second + 1);
}
return answer-1;
}