• toc {:toc}

๋ฌธ์ œ

๋‚จ๊ทน์— ์‚ฌ๋Š” ๊น€์ง€๋ฏผ ์„ ์ƒ๋‹˜์€ ํ•™์ƒ๋“ค์ด ๋˜๋„๋ก์ด๋ฉด ๋งŽ์€ ๋‹จ์–ด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.ย ๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ตฌ์˜จ๋‚œํ™”๋กœ ์ธํ•ด ์–ผ์Œ์ด ๋…น์•„์„œ ๊ณง ํ•™๊ต๊ฐ€ ๋ฌด๋„ˆ์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๊น€์ง€๋ฏผ์€ K๊ฐœ์˜ ๊ธ€์ž๋ฅผ ๊ฐ€๋ฅด์น  ์‹œ๊ฐ„ ๋ฐ–์— ์—†๋‹ค. ๊น€์ง€๋ฏผ์ด ๊ฐ€๋ฅด์น˜๊ณ  ๋‚œ ํ›„์—๋Š”, ํ•™์ƒ๋“ค์€ ๊ทธ K๊ฐœ์˜ ๊ธ€์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋‹จ์–ด๋งŒ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. ๊น€์ง€๋ฏผ์€ ์–ด๋–ค K๊ฐœ์˜ ๊ธ€์ž๋ฅผ ๊ฐ€๋ฅด์ณ์•ผ ํ•™์ƒ๋“ค์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋Š”์ง€ ๊ณ ๋ฏผ์— ๋น ์กŒ๋‹ค.

๋‚จ๊ทน์–ธ์–ด์˜ ๋ชจ๋“  ๋‹จ์–ด๋Š” โ€œantaโ€๋กœ ์‹œ์ž‘๋˜๊ณ , โ€œticaโ€๋กœ ๋๋‚œ๋‹ค. ๋‚จ๊ทน์–ธ์–ด์— ๋‹จ์–ด๋Š” N๊ฐœ ๋ฐ–์— ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ํ•™์ƒ๋“ค์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , K๋Š” 26๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๋‚จ๊ทน ์–ธ์–ด์˜ ๋‹จ์–ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹จ์–ด๋Š” ์˜์–ด ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ธธ์ด๊ฐ€ 8๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 15๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋ชจ๋“  ๋‹จ์–ด๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊น€์ง€๋ฏผ์ด K๊ฐœ์˜ ๊ธ€์ž๋ฅผ ๊ฐ€๋ฅด์น  ๋•Œ, ํ•™์ƒ๋“ค์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด ๊ฐœ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

ํ’€์ด

์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ดค์„ ๋•Œ์—๋Š” K๊ฐœ๋ฅผ ๊ตณ์ด ์ฑ„์šธ ํ•„์š” ์—†์ด K๊ฐœ ๋ณด๋‹ค ์ž‘๊ฒŒ ์„ ํƒํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด์„œ ๋ฌธ์ œ๊ฐ€ ์‰ฝ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•œ ๊ฒƒ์ด๊ณ  ์‹ค์ƒ์€ ๊ทธ๋ ‡์ง€ ์•Š์•˜๋‹ค. ์ตœ๋Œ€๋กœ ๋งŽ์ด ๋‹จ์–ด๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— K๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์„ ์„ ํƒํ•ด์•ผํ•œ๋‹ค. K๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ ์กฐํ•ฉ์„ ์„ ํƒํ•ด ํ•ด๋‹น ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋‹จ์–ด๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

  1. ์•ŒํŒŒ๋ฒณ์˜ ์ „์ฒด ์กฐํ•ฉ์„ ํ™•์ธํ•ด ์ตœ๋Œ€๋กœ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋น„๊ตํ•œ๋‹ค. (๋ธŒ๋ฃจํŠธ ํฌ์Šค ๋ฐฉ๋ฒ• : ์ˆœ์ฐจํƒ์ƒ‰, BFS, DFS)
  2. ๋ฐ˜๋ณตํ•ด์„œ ์„ ํƒํ•˜๋Š” ํšŸ์ˆ˜ K๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์žฌ๊ท€์ ์œผ๋กœ ์„ ํƒํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์—์„œ DFS๋ฅผ ์„ ํƒํ•ด ํ’€์ด
  3. ํ’€์ด ํ›„ ๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ์‹์„ ํ™•์ธํ•ด๋ณด๋‹ˆ bitmask ๋ผ๋Š” ๋ฐฉ์‹์ด ์žˆ์—ˆ๋‹ค. โ†’ ์กฐ์‚ฌ ํ›„ ์ถ”ํ›„ ํฌ์ŠคํŒ…
#include <bits/stdc++.h>
using namespace std;
 
int N, K, res=0, check[26] = {};
string alphabet = "bdefghjklmopqrsuvwxyz", pick;
vector<string> words;
 
// dfs๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ฐพ์•„๋ณด๊ธฐ
void dfs(int depth, int start){
	// a, n, t, i, c๋Š” ๋ฐ˜๋“œ์‹œ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์ œ์™ธํ•˜๊ณ  k-5๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์„ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ
    if (depth == K-5){
        int num = 0;
		// words์—์„œ ๋‹จ์–ด ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์˜ค๊ธฐ
        for(int i=0; i<words.size(); i++){
            int teach = 1;
	        // word ํ•˜๋‚˜์”ฉ ์•ŒํŒŒ๋ฒณ์ด ๊ฒน์น˜๋Š” ๊ฒƒ์ด ์žˆ๋Š”์ง€ ๊ฐœ์ˆ˜ ํŒŒ์•…
            for(auto ch : words[i]){
                if (ch == 'a' || ch == 'n' || ch == 't' || ch == 'i' || ch == 'c')
                    continue;
                if (check[int(ch)-97] == 0){
                    teach = 0;
                    break;
                }
            }
            if (teach) num++;
        }   
        res = max(res, num);
        return;
    }
 
	// K-5๊ฐœ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ for๋ฌธ
    for(int i=start; i<alphabet.size(); i++){
        check[int(alphabet[i])-97] = 1;
        dfs(depth+1, i+1);
        check[int(alphabet[i])-97] = 0;
    }
}
 
int main(){
    ios::sync_with_stdio(true);
    cin.tie(); cout.tie();
    
    cin >> N >> K;
    string str;
 
	// str ์—์„œ ์•ž, ๋’ค ๋นผ๊ณ  ์ค‘๊ฐ„๋งŒ ์ค‘๋ณต ์ œ์™ธํ•ด์„œ ์ €์žฅ
    for(int i = 0; i < N; i++){
        map<char, int> temp;
        string cut;
        cin >> str;
        str = str.substr(4, str.size()-4);
        for(int j = 0; j < str.size(); j++){
            temp[str[j]]=1;
        }
        for(auto ch : temp) cut += ch.first;
        words.push_back(cut);
 
    }
 
    
    if (K < 5){
        cout << 0 << endl;
        return 0;
    }
 
    dfs(0, 0);
    
    cout << res << endl;
 
 
    return 0;
}

์ฐธ๊ณ ๋ฌธํ—Œ

https://www.acmicpc.net/problem/1062

์—ฐ๊ฒฐ๋ฌธ์„œ