my study.

Coding Test/Softeer

[소프티어] CPTI, java

fftl 2025. 2. 16. 01:23

- 문제

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

- 풀이

import java.io.*;
import java.util.*;

public class Main {

    //주어지는 CPTI는 1과 0으로 이루어져 있기 때문에, 이진수로 표현할 수 있습니다.
    //따라서 입력받는 CPTI를 이진수로 변환하여 int[] 배열에 넣어주고 
    //쉽게 비교 할 수 있도록합니다.
    
    public static void main(String[] args) throws Exception{
        //입력받기 위한 br, st를 선언해줍니다.
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        //사람 수와, CPTI길이를 N과 M에 입력받습니다.
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        //CPTI를 이진수로 변환하여 담을 nums 배열입니다.
        int[] nums = new int[N];

        //입력받아 nums배열에 채워줍니다.
        for(int i=0; i<N; i++){
            nums[i] = Integer.parseInt(br.readLine(), 2);
        }

        //사람 수를 담을 cnt 배열입니다.
        int cnt = 0;

        //이중for문을 통해 사람들 서로를 모두 비교해줍니다.
        for(int i=0; i<N; i++){
            for(int j=i+1; j<N; j++){

                //Integer.bitCount()함수를 통해 서로 다른 값의 자리 수를 세어줍니다.
                int now = Integer.bitCount(nums[i]^nums[j]);

                //만약 다른 자리가 2개 이하라면 이 사람들은 친밀감을 느끼기 때문에
                //cnt에 추가해줍니다.
                if(now<=2) cnt++;
            }
        }

        //구해진 답을 출력해줍니다.
        System.out.println(cnt);
    }
}