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);
}