설명

같은 종류의 의상은 하나씩 입을 수 있다. 옷을 안입는 경우도 존재하기에 해당 경우도 추가해준다.

  • 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;
}

 

 

 

 

 

참고자료

https://st-lab.tistory.com/164