20529

20529

#include <iostream>
#include <vector>

using namespace std;

int MinMBTIDistance(vector<string> MBTI);
int CalcDistance(string a, string b);

int main()
{
    int T;

    cin >> T;

    for(int i = 0; i < T; ++i)
    {
        int N;
        cin >> N;
        vector<string> MBTI;
        MBTI.resize(N);
        for(int j = 0; j < N; ++j)`
        {
            cin >> MBTI[j];
        }
        if(N <= 16 * 2)
        {
            // 브루트포스
            cout << MinMBTIDistance(MBTI) << '\n';
        }
        else
        {
            cout << "0\n";
        }
    }

    return 0;
}

int MinMBTIDistance(vector<string> MBTI)
{
    int Size = MBTI.size();
    int Result = INT32_MAX;
    for(int i = 0; i < Size - 2; ++i)
    {
        for(int j = i + 1; j < Size - 1; ++j)
        {
            int BetweenIJ = CalcDistance(MBTI[i], MBTI[j]);
            for(int k = j + 1; k < Size; ++k)
            {
                int Temp = BetweenIJ + CalcDistance(MBTI[i], MBTI[k]) + CalcDistance(MBTI[j], MBTI[k]);
                Result = min(Result, Temp);
                if(Result == 0)
                {
                    goto LoopOut;
                }
            }
        }
    }
    LoopOut:;
    return Result;
}

int CalcDistance(string a, string b)
{
    int Result = 0;
    for(int i = 0; i < 4; ++i)
    {
        if(a[i] != b[i])
        {
            ++Result;
        }
    }
    return Result;
}

유형

비둘기집
브루트포스