본문 바로가기

코테

[백준 1062] 가르침 c++

반응형
#include<iostream>

using namespace std;

int n,k;
string arr[50]={"",};
bool alpha[26] = {0, };
int result = 0;

int start(int order, int cnt){
    if(cnt==k){
        int temp = 0;
        for(int i=0; i<n; i++){
            bool read = true;
            for(int j=4; j<arr[i].size()-4; j++){
                if(!alpha[arr[i][j]-'a']){
                    read = false;
                    break;
                }
            }
            if(read)    temp++;
        }
        result = max(temp, result);
        return 0;
    }
    for(int i=order+1; i<26; i++){
        if(!alpha[i]){
            alpha[i] = true;
            start(i, cnt+1);
            alpha[i] = false;
        } 
    }
    return 0;
}

int main(){
    cin>>n>>k;
    for(int i=0; i<n; i++){
        cin>>arr[i];
    }
    if(k<5){
        cout<<0;
        return 0;
    }
    if(k==26){
        cout<<n;
        return 0;
    }
    alpha['a'-'a'] = true;
    alpha['n'-'a'] = true;
    alpha['t'-'a'] = true;
    alpha['i'-'a'] = true;
    alpha['c'-'a'] = true;
    start(0,5);
    cout<<result;
    return 0;
}

오랜만의 백트래킹....

 

반응형

'코테' 카테고리의 다른 글

[백준 2339] 석판자르기 c++  (0) 2021.12.24
[백준 1300] k번째 수 c++  (0) 2021.12.23
[백준 2343] 기타레슨 c++  (0) 2021.12.22
c++로 코테 풀 때  (1) 2021.11.02
파이썬으로 코테 풀 때 알면 좋은 것들  (0) 2021.10.14