백준 1969 java : Greedy algorithms

magicdrill·2024년 11월 19일

백준 문제풀이

목록 보기
489/673

백준 1969 java : Greedy algorithms

import java.util.Arrays;
import java.util.Scanner;

public class bj1969 {
    static Scanner scanner = new Scanner(System.in);
    static int N, M;
    static char[][] gene;
    static int HammingDistance = 0;

    public static void main(String[] args) {
        inputData();
        System.out.println(findAnswer());
        System.out.println(HammingDistance);

        scanner.close();
    }

    public static void inputData() {
        System.out.println("inputData()");
        int i, j;

        N = scanner.nextInt();
        M = scanner.nextInt();
        gene = new char[N][M];
        for (i = 0; i < N; i++) {
            String temp = scanner.next();
            for (j = 0; j < M; j++) {
                gene[i][j] = temp.charAt(j);
            }
        }
    }

    public static String findAnswer() {
        System.out.println("findAnswer()");
        StringBuilder answer = new StringBuilder();
        int i, j;

        //모든 문자열과 비교해, 같은 문자가 가장 많은 문자열
        for (i = 0; i < M; i++) {

            //현재 열에 있는 문자 개수 파악
            int[] count = {0, 0, 0, 0};
            for (j = 0; j < N; j++) {
                if (gene[j][i] == 'A') {
                    count[0]++;
                } else if (gene[j][i] == 'C') {
                    count[1]++;
                } else if (gene[j][i] == 'G') {
                    count[2]++;
                } else {
                    count[3]++;
                }
            }

            //가장 많은 문자의 인덱스 구하기
            int max = -1, index = 0;
            for(j = 0; j < 4; j++){
                if(max < count[j]){
                    index = j;
                    max = count[j];
                }
            }

            //해당 인덱스를 문자열에 붙여서 하나씩 문자열 키우기
            if(index == 0){
                answer.append("A");
            }
            else if(index == 1){
                answer.append("C");
            }
            else if(index == 2){
                answer.append("G");
            }
            else{
                answer.append("T");
            }

            System.out.println("answer : " + answer);
        }

        for(i = 0; i < N; i++){
            for(j = 0; j < M; j++){
                if(gene[i][j] != answer.charAt(j)){
                    HammingDistance++;
                }
            }
        }

        return answer.toString();
    }
}

0개의 댓글