개발 블로그
article thumbnail

 

1. 아이디어

1. 브루트포스 방식으로 모든 케이스에 대해서 탐색하되

2. MBTI의 종류가 16가지라 입력값의 갯수가 32개를 초과하면 반드시 동일한 MBTI가 3개 이상 입력값에 존재하므로

3. N > 32 면 0을 N <= 32 면 거리 계산을 직접해준다!!

 

처음에 단순 브루트포스 방식으로 문제를 풀었더니 시간 초과가 나와서 참고 원리 중 '비둘기집 원리'에 대해 알아보고 2, 3번의 방법을 생각해냈다.

 

2. 풀이 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class _n20529_ {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();
        for (int t = 0; t < T; t++) {
            int N = Integer.parseInt(br.readLine());
            String[] mbtis = br.readLine().split(" ");

            if (N > 32) {
                sb.append("0").append("\n");
                continue;
            }

            int min = 12;

            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++) {
                        int d = calcDistance(mbtis[i], mbtis[j], mbtis[k]);
                        if (min > d) {
                            min = d;
                        }
                    }
                }
            }
            sb.append(min).append("\n");
        }

        System.out.println(sb);
    }

    public static int calcDistance(String A, String B, String C) {
        int d1 = 0;
        int d2 = 0;
        int d3 = 0;

        for (int i = 0; i < 4; i++) {
            if (A.charAt(i) != B.charAt(i)) {
                d1++;
            }

            if (B.charAt(i) != C.charAt(i)) {
                d2++;
            }

            if (C.charAt(i) != A.charAt(i)) {
                d3++;
            }
        }

        return d1 + d2 + d3;
    }
}

'Algorithm > 백준 알고리즘' 카테고리의 다른 글

2138번. 전구와 스위치  (0) 2023.10.03
1025번. 제곱수 찾기  (0) 2023.10.03
10799번. 쇠막대기  (0) 2023.04.12
2292번. 벌집  (0) 2023.04.07
2903번. 중앙 이동 알고리즘  (0) 2023.04.06
profile

개발 블로그

@하얀.손

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!