Codility Java GenomicRangeQuery
업데이트:
문제
코드
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int[] solution(String S, int[] P, int[] Q) {
int[] result = new int[P.length];
// All array is start 0. (Check for changing character is exists.)
int[] A = new int[S.length() + 1];
int[] C = new int[S.length() + 1];
int[] G = new int[S.length() + 1];
// Initializing each array.
for (int idx = 0; idx < S.length(); idx++) {
A[idx + 1] = A[idx];
C[idx + 1] = C[idx];
G[idx + 1] = G[idx];
switch(S.charAt(idx)) {
case 'A': A[idx + 1]++; break;
case 'C': C[idx + 1]++; break;
case 'G': G[idx + 1]++; break;
default: break;
}
}
// Check for contains word in P and Q.
for (int idx = 0; idx < P.length; idx++) {
if (A[P[idx]] != A[Q[idx] + 1]) {
result[idx] = 1;
} else if (C[P[idx]] != C[Q[idx] + 1]) {
result[idx] = 2;
} else if (G[P[idx]] != G[Q[idx] + 1]) {
result[idx] = 3;
} else {
result[idx] = 4;
}
}
return result;
}
}
설명
- 주어진 DNA 문자열 S를 분석하기 위해 A, C, G 배열을 생성한다.
- DNA 문자열이 A, C, G에 해당하지 않으면 T로 간주한다.
- A, C, G 배열은 각 index + 1 위치에 해당 문자열이 존재하면 문자열의 변화 감지를 위해 점층적으로 증가하도록 한다.
- 주어진 배열 P와 Q의 값을 이용하여 최소 결과 값인 A부터 G 순으로 문자열의 변화를 분석한다.
- P[index] ~ Q[index]까지 A, C, G 배열에 변화가 존재한다면 DNA 영향 계수를 주어진 문제의 결과로 반환한다.
- 만일 위의 변화가 없으면 T로 간주하여 해당 DNA 영향 계수를 주어진 문제의 결과로 반환한다.
결과
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기