실버 2
https://www.acmicpc.net/problem/12891
package Baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class S2_12891 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
//s, p, ans
int s = Integer.parseInt(st.nextToken());
int p = Integer.parseInt(st.nextToken());
int ans = 0;
//dna
st = new StringTokenizer(br.readLine());
char[] dna = st.nextToken().toCharArray();
//acgt 카운트
int[] acgt = new int[4];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 4; i++) {
acgt[i] = Integer.parseInt(st.nextToken());
}
//첫번째 부분 문자열
int start = 0;
int end = p - 1;
char[] first_arr = Arrays.copyOfRange(dna, start, end+1);
// System.out.println(first_arr);
//부분문자열의 acgt 개수 배열
int[] cnt = new int[4];
for (char f : first_arr) {
count(f, cnt, 1);
}
if (cnt[0] >= acgt[0] && cnt[1] >= acgt[1] && cnt[2] >= acgt[2] && cnt[3] >= acgt[3]) {
ans++;
}
// System.out.println(Arrays.toString(cnt));
while (end + 1 < s) {
count(dna[start], cnt, -1);
start++;
end++;
//처음과 끝 카운트
count(dna[end], cnt, 1);
// System.out.println(dna[start] + " " + dna[end]);
// System.out.println(Arrays.toString(cnt));
if (cnt[0] >= acgt[0] && cnt[1] >= acgt[1] && cnt[2] >= acgt[2] && cnt[3] >= acgt[3]) {
ans++;
}
}
System.out.println(ans);
}
static void count(char c, int[] cnt_arr, int add) {
if (c == 'A') {
cnt_arr[0] += add;
} else if (c == 'C') {
cnt_arr[1] += add;
} else if (c == 'G') {
cnt_arr[2] += add;
} else if (c == 'T') {
cnt_arr[3] += add;
}
}
}
package Baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
public class dfhjkd {
static int[] cnt= new int['Z'+1];
public static void main(String[] args) throws IOException {
BufferedReader input= new BufferedReader(new InputStreamReader(System.in));
StringTokenizer tokens = new StringTokenizer(input.readLine());
int S=Integer.parseInt(tokens.nextToken());
int P=Integer.parseInt(tokens.nextToken());
String Dna = input.readLine();
int[] min_num=new int[4];
int totalCnt = 0;
tokens= new StringTokenizer(input.readLine());
for(int i=0;i<4;i++) {
min_num[i]=Integer.parseInt(tokens.nextToken());
}
for(int i=0;i<P;i++) {
cnt[Dna.charAt(i)]++;
}
if(isAble(min_num)) {
totalCnt++;
}
for(int i=0;i<S-P;i++) {
cnt[Dna.charAt(i)]--;
cnt[Dna.charAt(i+P)]++;
if(isAble(min_num)) totalCnt++;
}
System.out.println(totalCnt);
}
static boolean isAble(int[] min_num) {
return cnt['A']>=min_num[0] && cnt['C']>=min_num[1] && cnt['G']>=min_num[2] && cnt['T']>=min_num[3];
}
}
이런 방법이.,..