비둘기집 원리에 대해 배울 수 있는 좋은 문제였다.
그리고 나는 처음에 모든 MBTI를 0~15 사이의 숫자로 변환한 뒤 xor하는 방법으로 심리적 거리를 계산했는데 오히려 이 방법이 문자열을 비교하는 방법보다 4배나 느리다는 것을 확인하고 비트연산으로 풀 수 있는 문제라고 해서 그것이 꼭 빠른 것이 아니라는 것을 알게 되었다.
#include <bits/stdc++.h>
using namespace std;
int getDist(string& a, string& b, string& c) {
int cnt = 0;
for (int i = 0; i < 4; ++i) {
if (a[i] != b[i]) cnt++;
if (a[i] != c[i]) cnt++;
if (b[i] != c[i]) cnt++;
}
return cnt;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<string> v(n);
for (int i = 0; i < n; ++i) cin >> v[i];
if (n > 32) {
cout << 0 << '\n';
continue;
}
int mmin = INT_MAX;
for (int i = 0; i < n-2; ++i) {
for (int j = i+1; j < n-1; ++j) {
for (int k = j+1; k < n; ++k) {
mmin = min(mmin, getDist(v[i], v[j], v[k]));
}
}
}
cout << mmin << '\n';
}
}