백준 20529 가장 가까운 세 사람의 심리적 거리

Caden·2023년 9월 2일
0

백준

목록 보기
12/20

비둘기집 원리에 대해 배울 수 있는 좋은 문제였다.
그리고 나는 처음에 모든 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';
    }
}

0개의 댓글