- 테스트 케이스 T를 입력받는다.
- 해빈이가 가진 의상의 수 N을 입력 받는다.
- 해빈이가 가진 의상의 이름과 종류가 공백으로 주어진다. 이때 같은 종류의 의상을 하나만 입을 수 있다.
- 해빈이가 알몸이 아닌 상태로 의상을 입을 수 있는 경우를 출력
- 테스트케이스 T를 입력받는다.
- key로 string(의상 종류)을 가지는 haebin이라는 map을 선언한다.
- 이름과 카테고리를 입력받는다.
- 여기서 포인트는 사실 이름은 신경쓸 필요가 없다.
-> Why ? 어차피 같은 종류의 의상을 못 입다고 하였기 때문에 category만 신경쓰면 된다.- map에 해당 category가 들어오면 value값을 증가시켜 준다.
- 입력을 모두 받은 후 auto를 이용하여 value값을 꺼내준다.
- 여기선 모든 경우의 수를 구해야 하기 때문에 꺼낸 value값에 1을 더한 후 result라는 결과값에 계속 곱해준다.
-> Ex) 다른 카테고리 2개의 경우의 수
[sunglass] = 2, [hat] = 1
3 X 2 = 6- 위에서 구한 경우의 수에서 아무 것도 입지 않은 경우의 수 1을 빼고 출력


#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
int main(void) {
int n;
int t;
string name;
string category;
cin >> t;
for (int i = 0; i < t; i++) {
map<string, int> haebin;
cin >> n;
for (int j = 0; j < n; j++) {
cin >> name >> category;
haebin[category]++;
}
int result = 1;
for (auto temp: haebin) {
result *= ((temp.second) + 1);
}
result--;
cout << result << "\n";
}
return 0;
}
매우 쉬운 문제였다.
맵 사용, 경우의 수만 생각하면 5분 안에 푸는 문제