문제
풀이
-
의상의 종류마다 개수를 카운트해준다.
-
의상의 종류에 그 의상을 입지 않은 경우의 수를 더해서 모두 곱해주고 모두 안 입은 경우의 수 1을 빼준다.
이 문제에서 의상의 이름은 사용되지 않는다. 그냥 의상 종류의 개수만 카운트해주면 된다.
map 자료구조 를 통해 구현했다. map에 key값으로 의상종류를 넣어주고 value 값으로 1을 넣어준다.
1
m.insert({catag, 1});
find 함수를 통해 이미 의상종류가 map에 존재할 경우 value를 1 증가시켜준다.
1
2
3
4
5
6
7
// find 함수는 찾는 key값이 없으면 end 주소를 리턴
if (m.find(catag) == m.end())
{
m.insert({catag, 1});
}
else
m[catag]++;
소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <string>
#include <iostream>
#include <map>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T;
cin >> T;
int n;
string catag, name;
while (T--)
{
map<string, int> m;
cin >> n;
while (n--)
{
// name은 사용 x
cin >> name >> catag;
// find 함수는 찾는 key값이 없으면 end 주소를 리턴
if (m.find(catag) == m.end())
{
m.insert({catag, 1});
}
else
m[catag]++;
}
int ans = 1;
for (auto i : m)
{
ans *= (i.second + 1);
}
ans -= 1;
cout << ans << '\n';
}
return 0;
}