#include <iostream>
#include <map>
using namespace std;
int T, n, ans;
string name, type;
int main(){
cin >> T;
for(int i=0; i<T; i++){
ans = 0; // 초기화
map<string, int> m;
cin >> n;
if(n == 0){
cout << 0 << "\n";
continue; // 혜빈이가 가진 의상의 수는 0일수도 있다.
}
for(int j=0; j<n; j++){
cin >> name >> type; // 이름 저장할 필요 X 같은 이름을 가진 의상 존재 X
m[type]++; // 수 세기 - map insert되면 0부터 시작
}
for(auto iter : m){
if(ans == 0){
ans = iter.second + 1;
} else {
ans *= (iter.second + 1);
}
}
cout << ans - 1 << "\n";
}
return 0;
}
해싱 연습용 문제.
토스 코테에서 비슷한 문제가 나왔다. 그때는 아마 이름이 중복되어서도 입력된다고 했던 것 같음. 여기서는 이름이 중복되지는 않는 문제이다.
따라서 이름은 신경쓰지 않아도 된다. 오직 종류만 보면 된다.
경우의 수는 (해당 타입 옷 수) + 1(입지 않은 경우) 를 해서 전부 곱해주고 아무것도 입지 않는 1개의 경우를 빼주면 된다. 기초적인 확통 문제 같다!
그리고 꽤 많이 틀렸습니다!를 마주하게 되었는데,
문제를 잘 읽어보면 해빈이가 가진 의상의 수 n은 0일 수 있다. 따라서
1
0
ans)
0
의 반례를 잘 확인해줘야된다. 주의하기.