스크린샷 2023-10-01 오전 1.03.52.png

스크린샷 2023-10-01 오전 1.04.32.png

package com.example.algorithm.twopointer;

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

public class DnaPassword {

    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        int dnaLength = Integer.parseInt(stringTokenizer.nextToken());
        int passwordLength = Integer.parseInt(stringTokenizer.nextToken());

        stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        String dnaString = stringTokenizer.nextToken();

        stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        int[] acgt = new int[4];
        int[] checkArr = new int[4];
        checkArr[0] = 0;
        checkArr[1] = 0;
        checkArr[2] = 0;
        checkArr[3] = 0;

        for (int i = 0; i < 4; i++) {
            acgt[i] = Integer.parseInt(stringTokenizer.nextToken());
        }

        StringBuilder passwordString = new StringBuilder(dnaString.substring(0, passwordLength));

        for (int i = 0; i< passwordLength; i++) {
            switch (passwordString.charAt(i)) {
                case 'A': checkArr[0] = checkArr[0] + 1; break;
                case 'C': checkArr[1] = checkArr[1] + 1; break;
                case 'G': checkArr[2] = checkArr[2] + 1; break;
                case 'T': checkArr[3] = checkArr[3] + 1; break;
            }
        }

        int result = 0;

        if (checkArr[0] >= acgt[0] && checkArr[1] >= acgt[1] && checkArr[2] >= acgt[2] && checkArr[3] >= acgt[3]) result++;

        for (int i = 1; i <= dnaLength - passwordLength; i++) {
            switch(dnaString.charAt(i - 1)) {
                case 'A': checkArr[0] = checkArr[0] - 1; break;
                case 'C': checkArr[1] = checkArr[1] - 1; break;
                case 'G': checkArr[2] = checkArr[2] - 1; break;
                case 'T': checkArr[3] = checkArr[3] - 1; break;
            }

            switch(dnaString.charAt(i + passwordLength - 1)) {
                case 'A': checkArr[0] = checkArr[0] + 1; break;
                case 'C': checkArr[1] = checkArr[1] + 1; break;
                case 'G': checkArr[2] = checkArr[2] + 1; break;
                case 'T': checkArr[3] = checkArr[3] + 1; break;
            }

            if (checkArr[0] >= acgt[0] && checkArr[1] >= acgt[1] && checkArr[2] >= acgt[2] && checkArr[3] >= acgt[3]) result++;
        }

        System.out.println(result);
    }
}