알고리즘 공부

[백준 20529번] 가장 가까운 세 사람의 심리적 거리 - java

철매존 2024. 12. 3. 22:10
728x90
반응형

문제 설명

1. 테스트 케이스 개수가 주어진다.
2. 몇개의 MBTI가 주어질지 알려주고
3. MBTI가 주어진다.
4. 다른 알파뱃만큼 거리가 있는 것이다.

풀이 과정

1. 나는 좀 골때리게 풀었다.
2. HashMap을 두고 같은 MBTI가 3개 이상 주어졌는지 확인한다.
3. 중복 3개까지는 list에 저장하고 그거 넘으면 저장 안한다.
4. 이후로 list를 실제로 돌면서 심리적 거리를 구하고 넣으면 된다.
5. 이렇게 한 이유는 모든 MBTI가 같은 경우 나 중복을 제거했더니 2개만 남는 경우 를 제외하기 위해서이다. 특히 2개만 남으면 이게 뭐가 어떤 갯수를 가졌는지 몰라서 난감해지기 때문.

코드

import java.util.*;

public class Main
{

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int T = sc.nextInt();

        while(T-->0) {
            int N = sc.nextInt();

            ArrayList<String> mbtiList = new ArrayList<>();

            for(int i=0; i<N; i++) {
                String mbti = sc.next();
                mbtiList.add(mbti);
            }

            int ans = Integer.MAX_VALUE;
            for(int i=0; i<mbtiList.size(); i++) {
                for(int j=i+1; j<mbtiList.size(); j++) {
                    for(int k=j+1; k<mbtiList.size();k++) {
                        String first = mbtiList.get(i);
                        String second = mbtiList.get(j);
                        String third = mbtiList.get(k);

                        int cnt = distance(first, second) + distance(second, third) + distance(first, third);
                        ans = Math.min(ans, cnt);
                    }
                }
            }
            System.out.println(ans);
        }
    }

    private static int distance(String a, String b) {
        int cnt = 0;
        for(int i=0; i<4; i++) {
            if (a.charAt(i) != b.charAt(i)) cnt++;
        }
        return cnt;
    }
}

 

반응형