Search

[Baekjoon] 8933 ㅏ-

Tags
Date

설명

입력

출력

예시 입력

예시 출력

JavaScript
복사
JavaScript
복사

풀이 과정

최종 코드

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); while (T-- > 0) { String[] input = br.readLine().split(" "); int k = Integer.parseInt(input[0]); String dna = input[1]; System.out.println(findKMCS(dna, k)); } } private static int findKMCS(String dna, int k) { HashMap<Long, Integer> map = new HashMap<>(); long[] count = new long[4]; // 'A', 'G', 'T', 'C'의 빈도 수 for (int i = 0; i < k; i++) { count[charToIndex(dna.charAt(i))]++; } long hash = hash(count); map.put(hash, 1); int maxFrequency = 1; for (int i = k; i < dna.length(); i++) { count[charToIndex(dna.charAt(i - k))]--; count[charToIndex(dna.charAt(i))]++; hash = hash(count); int frequency = map.getOrDefault(hash, 0) + 1; map.put(hash, frequency); maxFrequency = Math.max(maxFrequency, frequency); } return maxFrequency; } private static int charToIndex(char c) { switch (c) { case 'A': return 0; case 'G': return 1; case 'T': return 2; case 'C': return 3; default: return -1; // 이 경우는 발생하지 않음 } } // 간단한 해시 함수로 'A', 'G', 'T', 'C'의 빈도 수를 하나의 해시값으로 변환 private static long hash(long[] count) { return count[0] + 10007 * count[1] + 1000000007 * count[2] + 10000000000037L * count[3]; } }
JavaScript
복사
오류 코드