녕의 학습 기록

백준_12891 DNA 비밀번호 (슬라이딩 윈도우) 본문

Algorithm/Algorithm 문제

백준_12891 DNA 비밀번호 (슬라이딩 윈도우)

kjyyjk 2023. 11. 24. 22:27

 

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

public class BJ_12891 {

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int i, j;
        int s = Integer.parseInt(st.nextToken());
        int p = Integer.parseInt(st.nextToken());
        int result = 0;

        char[] dnaArr = br.readLine().toCharArray();
        char temp;
        int[] checkArr = new int[4];
        int[] myArr = new int[4];

        st = new StringTokenizer(br.readLine(), " ");
        for(i=0; i<4; i++) {
            checkArr[i] += Integer.parseInt(st.nextToken());
        }

        for(i=0; i<p; i++) {
            temp = dnaArr[i];

            if(temp == 'A') {
                myArr[0]++;
            } else if(temp == 'C') {
                myArr[1]++;
            } else if(temp == 'G') {
                myArr[2]++;
            } else {
                myArr[3]++;
            }
        }

        if(check(myArr, checkArr)) {
            result++;
        }

        for(j=p; j<s; j++) {
            i = j - p;

            if (dnaArr[i] == 'A') {
                myArr[0]--;
            } else if (dnaArr[i] == 'C') {
                myArr[1]--;
            } else if (dnaArr[i] == 'G') {
                myArr[2]--;
            } else {
                myArr[3]--;
            }

            if (dnaArr[j] == 'A') {
                myArr[0]++;
            } else if (dnaArr[j] == 'C') {
                myArr[1]++;
            } else if (dnaArr[j] == 'G') {
                myArr[2]++;
            } else {
                myArr[3]++;
            }

            if(check(myArr, checkArr)) {
                result++;
            }
        }

        System.out.println(new StringBuilder().append(result));
    }

    public static boolean check(int[] my, int[] check) {

        for(int i=0; i<4; i++) {
            if(my[i] < check[i]) {
                return false;
            }
        }
        return true;
    }

}

 

 

 

12891번: DNA 비밀번호

평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA”

www.acmicpc.net