avatar
$
Published on

Codility - Genomic Range Query

Author
  • avatar
    Name
    yceffort

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๋ฅผ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.