의상의 이름과 의상의 종류가 쌍으로 주어지고
각 종류별로 조합을 세는 문제이다.
위 입출력 #1 을 보면
옷의 종류는
headgear -> yellow_hat, green_turban -> 2가지
eyewear -> blue_sunglasses -> 1가지
가능한 옷의 조합은
headgear -> yellow_hat, green_turban, 선택 안함 -> 3가지
eyewear -> blue_sunglasses, 선택 안함 -> 2가지
3*2 = 6이지만
아무것도 선택하지 않는 경우는 없으므로 하나를 뺀 5가지 조합이 가능하다.
따라서 map에 key(옷의 종류) value(가짓수) 로 저장을 해서 경우의 수를 세면된다.
#include <string>
#include <vector>
#include <iostream>
#include <unordered_map>
using namespace std;
int solution(vector<vector<string>> clothes) {
int answer = 1;
unordered_map<string, int> category;
// map에 옷 가짓수 저장
for(int i=0;i<clothes.size();i++){
category[clothes[i][1]] ++;
}
for(auto pair:category){
answer *= pair.second+1;
}
answer--;
return answer;
}
int main(){
vector<vector<string>> clothes =
{{"yellowhat", "headgear"},
{"bluesunglasses", "eyewear"},
{"green_turban", "headgear"}};
solution(clothes);
return 0;
}