yceffort

Codility - Genomic Range Query

Published on June 22, 2020

Genomic Range Query

문제

DNA는 A, C, G, T로 구성되어 있는데, 이는 각각 1, 2, 3, 4를 가르킨다. 이러한 DNA를 리턴하는 S가 있고, 배열의 길이가 같은 P와 Q가 있다.

S=CAGCCTA
P=[2, 5, 0]
Q=[4, 5, 6]

각 0번째 요소는 2, 4다.
2번째 ~ 4번째 DNA는 GCC이고, 여기서 제일 작은 값은 C, 즉 2를 리턴한다.

각 1번째 요소는 5, 5다.
T 밖에 없으므로 2를 리턴한다.

각 2번째 요소는 0, 6이다.
CAGCCT이고, 가장 작은 값은 A다. 즉 1을 리턴한다.

답은 [2, 4, 1] 이다.

풀이

function solution(S, P, Q) {
    const answers = []
    for (let i=0; i < P.length; i++) {
        
        const slice = S.slice(P[i], Q[i] + 1)
        
        if (slice.indexOf('A') !== -1) {
            answers.push(1)
        } else if (slice.indexOf('C') !== -1) {
            answers.push(2)
        } else if (slice.indexOf('G') !== -1) {
            answers.push(3)
        } else if (slice.indexOf('T') !== -1) {
            answers.push(4)
        }
    }
    
    return answers
}
  • slice를 하고, 최초에는 이를 sort해서 테스트 하려니 timeout이 났다.
  • slice를 하고, slice한 문자열을 돌면서 체크하니 역시 timeout이 났다.
  • slice 된 문자열에 그냥 indexOf를 하기로 했다.