[BOJ]9997 폰트

강동현·2024년 1월 8일
0

코딩테스트

목록 보기
62/111
  • 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){
        //모든 bit = 1 -> 모든 알파벳이 존재 -> ans++
        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;
        //i번째 문자열 알파벳 보유 bit 체크
        for(auto c : s) b |= (1 << (c - 'a'));
        //i번쨰 문자열의 알파벳 보유 bit 할당
        a[i] = b;
    }
    sol(0, 0);
    cout << ans;
}
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글

Powered by GraphCDN, the GraphQL CDN