[백준] 12891 DNA 비밀번호

leeng·2023년 8월 14일
0

https://www.acmicpc.net/problem/12891

// 비밀번호로 사용할 부분문자열의 길이 P
// DNAStr = 두번 째 줄에는 민호가 임의로 만든 DNA 문자열
// ACGT = 부분문자열에 포함되어야 할 {‘A’, ‘C’, ‘G’, ‘T’} 의 최소 개수
void countDNAPassword(int P, String DNAStr, int[] ACGT) {
        int count = 0;
        int[] countArr = new int[ACGT.length];
        String[] DNAStrArr = DNAStr.split("");

        for (int i = 0; i < P; i++) {
            if (DNAStrArr[i].equals("A") ) {
                countArr[0]++;
            } else if (DNAStrArr[i].equals("C")) {
                countArr[1]++;
            } else if (DNAStrArr[i].equals("G")) {
                countArr[2]++;
            } else if (DNAStrArr[i].equals("T")) {
                countArr[3]++;
            }
        }

        // ACGT 2,0,1,1 이상인지 검사해서 카운트
        count++;
        for (int i = 0; i < ACGT.length; i++) {
            if (ACGT[i] > countArr[i]) {
                count--;
                break;
            }
        }

        int i = 1;
        int j = P;

        while (j < DNAStrArr.length) {
            if (DNAStrArr[i - 1].equals("A")) {
                countArr[0]--;
            } else if (DNAStrArr[i - 1].equals("C")) {
                countArr[1]--;
            } else if (DNAStrArr[i - 1].equals("G")) {
                countArr[2]--;
            } else if (DNAStrArr[i - 1].equals("T")) {
                countArr[3]--;
            }

            if (DNAStrArr[j].equals("A")) {
                countArr[0]++;
            } else if (DNAStrArr[j].equals("C")) {
                countArr[1]++;
            } else if (DNAStrArr[j].equals("G")) {
                countArr[2]++;
            } else if (DNAStrArr[j].equals("T")) {
                countArr[3]++;
            }

            // ACGT 2,0,1,1 이상인지 검사해서 카운트
            count++;
            for (int a = 0; a < ACGT.length; a++) {
                if (ACGT[a] > countArr[a]) {
                    count--;
                    break;
                }
            }

            i++;
            j++;
        }
        System.out.println(count);
    }
profile
기술블로그보다는 기록블로그

0개의 댓글