map
을 활용하여 들어오는 의상의 종류(string
)를 Key로 하고, 의상의 이름은 따로 저장하지 않고 갯수만 count해야 함(문자열 count니 map
쓰기)string
과 int
로 받는 것까진 생각하였으나, 각 의상의 종류별 어떻게 조합을 만들어 내야 할지 생각하지 못함map
의 Key에서 나오는 value들의 조합을 구현해야 한다고 생각하여 시간을 허비하고 못 품항상 기억해야 할 것 : 코테에서 풀이 또는 코드가 지나치게 길어진다?? 너가 잘못한 거임 => 분명 더 효율적인 방법 존재
TIP : 경우의 수를 받는 변수 :
long long
type 쓰기 습관화
t
를 받는 다음, t번 반복한다. (단순 횟수 반복을 사용하기 때문에while
문 사용해서 for
문보다 깔끔하게 코드 짜기 가능)map<string, int>
을 통해 의상의 종류와, 해당 의상의 수를 담을 수 있는 자료구조 생성(문제에서 같은 이름을 가진 의상은 존재하지 않는다고 했으므로, 입력으로 들어오는 모든 경우는 다 unique하다고 가정해도 좋음)first
는 key, second
는 value 기억하기#include<bits/stdc++.h>
using namespace std;
int t, n;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
// 1. Input t
cin >> t;
// 2. Input n for each t
while(t--){
cin >> n;
// 2-1 경우의 수는 무조건 long long
long long ret = 1;
map<string, int> mp;
string name, type;
for(int i = 0; i < n; i++){
cin >> name >> type;
mp[type]++;
}
// 2.2 경우의 수 계산
for(auto it: mp){
ret *= (long long) it.second + 1;
}
ret--;
cout << ret << '\n';
}
return 0;
}