• 문제 링크
8933번: MCS
현대 분자 생물학에서 유전자 정보는 모두 DNA로 인코딩해서 나타낸다. 컴퓨터 과학에서는 DNA를 {A, G, T, C}로만 이루어진 길이가 아주 긴 문자열로 표현한다. 다른 것보다 많이 등장하는 DNA(부분
www.acmicpc.net
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class Main {
static int[] arr = new int[4];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
while (t-- > 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
int k = Integer.parseInt(st.nextToken());
String w = st.nextToken();
for (int i = 0; i < k; i++) count(w.charAt(i), 1);
Map<Integer, Integer> map = new HashMap<>();
map.put(getKey(), 1);
int max = 0, key, value;
for (int i = 0; i < w.length() - k; i++) {
count(w.charAt(i), -1);
count(w.charAt(i + k), 1);
map.put(key = getKey(), value = map.getOrDefault(key, 0) + 1);
max = Math.max(max, value);
}
sb.append(max).append("\n");
}
bw.write(sb.toString());
bw.flush();
}
private static void count(char c, int sign) {
switch (c) {
case 'A':
arr[0] += sign;
break;
case 'G':
arr[1] += sign;
break;
case 'T':
arr[2] += sign;
break;
case 'C':
arr[3] += sign;
break;
}
}
private static int getKey() {
return arr[0] + arr[1] * 600 + arr[2] * 600 * 600 + arr[3] * 600 * 600 * 600;
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 14769 Stacking Cups - Data Structure / Java (0) | 2024.01.31 |
---|---|
[백준] 24431 유사 라임 게임 - Data Structure / Java (0) | 2024.01.30 |
[백준] 1639 행운의 티켓 - Brute Force / Java (0) | 2024.01.28 |
[백준] 1075 나누기 - Brute Force / Java (0) | 2024.01.27 |
[백준] 16561 3의 배수 - Brute Force / Java (0) | 2024.01.26 |
댓글