설명
같은 종류의 의상은 하나씩 입을 수 있다. 옷을 안입는 경우도 존재하기에 해당 경우도 추가해준다.
- headgear: hat, turban, null
- eyeware: sunglasses, null
종류당 하나의 옷을 고를 수 있으므로 n은 옷의 종류를, r에는 선택할 옷의 개수를 대입하면 된다.
- headgear: $_{3}C_{1} = 3$
- eyewear: $_{2}C_{1} = 2$
경우의 수는 곱해서 구할 수 있으며, 최종값에서 아무 옷도 안입은 경우를 제외하기 위해 1을 빼준다.
- $3 \times 2 - 1 = 5$
코드
#include <bits/stdc++.h>
using namespace std;
// 경우의 수의 타입은 long long 쓰는 것이 정신건강에 좋다.
int t, n;
string a, b;
int main()
{
cin >> t;
while (t--) {
map<string, int> _map;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a >> b;
_map[b]++;
}
long long ret = 1;
for (auto c : _map) {
ret *= ((long long)c.second + 1);
}
ret--;
cout << ret << "\n";
}
return 0;
}
참고자료
'역시 내 문제해결 알고리즘은 잘못됐다' 카테고리의 다른 글
백준 2109번 순회강연 [C/C++] (0) | 2025.05.23 |
---|---|
백준 15829번 Hashing [C++] (0) | 2025.02.27 |
백준 10989번 수 정렬하기3 [C/C++] (0) | 2021.02.21 |
백준 1978번 소수찾기 C/C++ (0) | 2021.01.10 |
백준 2908번 C/C++ (0) | 2021.01.03 |