2 min read

๋ฐฑ์ค€ 1062๋ฒˆ ๊ฐ€๋ฅด์นจ

๋ฌธ์ œ ๋งํฌ

๋ฌธ์ž์—ด์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๋งŒ๋“ค์–ด์„œ ๋น„๊ตํ•  ํ•„์š”๋Š” ์—†๋‹ค. ์–ด๋–ค ๊ธ€์ž๋ฅผ ๋ฐฐ์› ๋Š”์ง€ ๋น„ํŠธ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

i ๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ๋ฐฐ์šด๋‹ค๋Š” ๊ฒƒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

int cur = cur | (1<<i);

์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๊ธ€์ž๋“ค cur๋กœ ๋‹จ์–ด x๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ?

if (((cur^x)&x) == 0) can++;

xor ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๊ธ€์ž์™€ ๋‹จ์–ด์— ํฌํ•จ๋œ ๊ธ€์ž ์ค‘ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ธ€์ž๋ฅผ ์ฐพ๊ณ , ์ด ๊ธ€์ž๊ฐ€ x์— ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด ๋‹จ์–ด๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๋‹ค.

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int n, k;
int ans = 0;
vector<int> v;

void solve(int cur, int cnt, int idx) {
    if (cnt == k) {
        int can = 0;
        for (auto x : v) {
            if (((cur^x)&x) == 0) can++;
        }
        ans = max(ans, can);
        return;
    }

    for (int i = idx+1; i < 26; i++) {
        if (cur&(1<<i)) continue;
        solve(cur|(1<<i), cnt+1, i);
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> k;
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        int x = 0;
        for (auto c : s) {
            x = x|(1<<(c-'a'));
        }
        v.push_back(x);
    }

    if (k < 5) {
        cout << 0 << '\n';
        return 0;
    }

    int start = 0;
    string s = "antic";
    for (auto c : s) {
        start = start|(1<<(c-'a'));
    }
    solve(start, 5, 0);

    cout << ans << '\n';

    return 0;
}

๋ชจ๋“  ๋‹จ์–ด์— 'a', 'n', 't', 'i', 'c' ๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ณ ๋ คํ•ด์ฃผ์—ˆ๋‹ค.