๐ฌย ๋ฌธ์
https://app.codility.com/programmers/lessons/5-prefix_sums/genomic_range_query/
๐ฌย Idea
- ์ฒ์์ ๊ต์ฅํ ๊ฐ๋จํ ๋ฌธ์ ๋ผ ์๊ฐํ์ง๋ง, ํจ์จ์ฑ ํ
์คํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํด ๊ต์ฅํ ์ ๋ฅผ ์ผ๋ค.
- O(N^2)์ ํจ์จ์ฑ์ O(N + M)์ผ๋ก ๋์ด๊ธฐ ์ํด ๊ตฌ๊ฐํฉ์ ์ฌ์ฉํด์ฃผ์๋ค.
- a, c, g, t ๊ฐ๊ฐ์ ๋ฐฐ์ด์ ๋ง๋ค์ด (t๋ ์์ด๋ ๋จ) ์ํ๋ฒณ์ด ๋์จ ๊ตฌ๊ฐ์๋ ์ด์ ๊ฐ + 1์ ํด์ฃผ์ด ์ ์ฅํด์ค๋ค.
- ์ดํ P๋ฅผ ๋๋ฉด์ (P) ์์ (Q + 1) ๊น์ง์ ์ฐจ๊ฐ 0 ์ด์์ผ ๋ a,c,g,t ์ค ์กฐ๊ฑด์ ํด๋นํ๋ ๊ฐ์ ans์ appendํ๋ค.
- Q + 1 ๊น์ง์ธ์ด์ : ์ด์ ์ธ๋ฑ์ค์ ๋น๊ตํ์ฌ ํด๋น ๊ตฌ๊ฐ์์ ์ํ๋ฒณ์ด ๋ฑ์ฅํ๋์ง๋ฅผ ํ์
ํ๊ธฐ ์ํด ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ +1 ํด์ฃผ์๊ธฐ ๋๋ฌธ์ด๋ค.
๐ฌย ํ์ด
publicfunc solution(_ S :inoutString, _ P :inout[Int], _ Q :inout[Int])->[Int]{vara=Array(repeating:0, count:S.count +1)varc=Array(repeating:0, count:S.count +1)varg=Array(repeating:0, count:S.count +1)vart=Array(repeating:0, count:S.count +1)varans:[Int]=[]for(idx, i)inS.enumerated(){a[idx +1]=a[idx]c[idx +1]=c[idx]g[idx +1]=g[idx]t[idx +1]=t[idx]switch i {case"A":a[idx +1]+=1case"C":c[idx +1]+=1case"G":g[idx +1]+=1default:t[idx +1]+=1}}foriin0..<P.count {ifa[Q[i]+1]- a[P[i]]>0{
ans.append(1)}elseifc[Q[i]+1]- c[P[i]]>0{
ans.append(2)}elseifg[Q[i]+1]- g[P[i]]>0{
ans.append(3)}else{
ans.append(4)}}return ans
}์์์๊ฐ : 1์๊ฐ +
์๊ฐ ๋ณต์ก๋ : O(N + M)
ํ๊ฐํ : https://app.codility.com/demo/results/training7V4PMC-ED3/
๐ฌย ๋ฌธ์ https://app.codility.com/programmers/lessons/5-prefix_sums/genomic_range_query/
๐ฌย Idea๐ฌย ํ์ด์์์๊ฐ: 1์๊ฐ +์๊ฐ ๋ณต์ก๋: O(N + M)ํ๊ฐํ: https://app.codility.com/demo/results/training7V4PMC-ED3/