- sol : 재귀
- bit를 이용해 현재 문자열 표시
- 재귀를 이용해 모든 경우의 수 조합
- 재귀
- 현재 문자를 포함시킨 경우
- 현재 문자를 포함시키지 않는 경우
- b == (1<<26)-1 27비트(10...0) - 1 = 26비트(1...1) 즉, 모든 알파벳이 존재하는 경우를 체크
- 메인
- 각 케이스의 알파벳 유무를 체크하는 a 배열 사용
- 현재 단어의 모든 알파벳을 비트를 활용해 체크
#include <bits/stdc++.h>
using namespace std;
int N, ans, a[25];
void sol(int n, int b){
if(n == N){
if(b == (1<<26)-1) ++ans;
return;
}
sol(n+1, b);
sol(n+1, b|a[n]);
}
int main(){
cin >> N;
for(int i = 0; i < N; ++i){
string s;
cin >> s;
int b = 0;
for(auto c : s) b |= (1 << (c - 'a'));
a[i] = b;
}
sol(0, 0);
cout << ans;
}