티스토리 뷰

알고리즘/BOJ

[백준] 1062 가르침

세진짱 2020. 1. 26. 18:51

 

완전탐색을 통해 찾을 수 있는 문제다

모든 단어는 antc로 시작하고 tica로 끝나므로

최소 antic 문자는 배워야한다! 5개!!

 

그럼 알파벳 21개중에 내가 k-5개를 골라서

그 알파벳들로 최대로 배울 수 있는 문장수를 찾으면 된다!

 

비트를 통해 알파벳을 고르고 하나하나 확인해보자!

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
int n,k,ans;
int arr[22];
bool alpha[26];
string s[55];
 
int solve(){
    int ret=0;
    for(int i=0;i<n;i++){
        bool c=true;
        for(int j=0;j<s[i].size();j++){
            if(!alpha[s[i][j]-'a']){
                c=falsebreak;
            }
        }
        if(c) ret+=1;
    }
    return ret;
}
 
int main(){
    int cnt=0;
    for(int i=0;i<26;i++){
        char c = i+'a';
        if(c=='a' || c=='n' || c=='t' || c=='i' || c=='c'continue;
        arr[cnt++=i;
    }
 
    scanf(" %d %d",&n,&k);
    for(int i=0;i<n;i++){
        cin>>s[i];
        string t="";
        for(int j=0;j<s[i].size();j++){
            char c = s[i][j];
            if(c=='a' || c=='n' || c=='t' || c=='i' || c=='c'continue;
            t+=c;
        }
        s[i]=t;
    }
    k-=5;
    for(int i=0;i<(1<<cnt);i++){
        int tc=0;
        memset(alpha,0,sizeof(alpha));
        for(int j=0;j<cnt;j++){
            if(i&(1<<j)) {
                tc++; alpha[arr[j]]=true;
            }
        }
        if(k !=tc) continue;
        ans = max(ans,solve());
    }
    printf("%d\n",ans);
}
 
 

'알고리즘 > BOJ' 카테고리의 다른 글

[백준] 12100 2048 (Easy)  (0) 2020.01.28
[백준] 13460 구슬 탈출 2  (0) 2020.01.27
[백준] 1248 맞춰봐  (0) 2020.01.26
[백준] 9663 N-Queen  (0) 2020.01.26
[백준] 1339 단어 수학  (0) 2020.01.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함