๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฌ Biology/๋ฐ”์ด์˜ค ์ฝ”๋”ฉ ๋ฌธ์ œ

[ROSALIND] DNA ์„œ์—ด์—์„œ motif ์ฐพ๊ธฐ

by HelloRabbit 2023. 5. 28.
728x90

๋ฌธ์ œ ์„ค๋ช…

์„œ๋กœ ๋‹ค๋ฅธ ์ข…์˜ ์œ ์ „์ฒด์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ€์ง„ DNA ์„œ์—ด์ด ๋ฐœ๊ฒฌ๋œ๋‹ค๋ฉด ์ด ์„œ์—ด์€ ๋‘ ์ข…์—์„œ ๋ชจ๋‘ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„œ์—ด์„ ๋ชจํ‹ฐํ”„(motif)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋ถ„์ž์ƒ๋ฌผํ•™ ๋ถ„์•ผ์—์„œ๋Š” ์–ด๋–ค ์ƒ๋ฌผ์˜ ์œ ์ „์ฒด์—์„œ ์ด๋Ÿฐ ๋ชจํ‹ฐํ”„๋ฅผ ์ฐพ๋Š” ์ผ์„ ํ”ํžˆ ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ชจํ‹ฐํ”„์ฒ˜๋Ÿผ ์œ ์‚ฌํ•œ ์„œ์—ด์ด ์—ฌ๋Ÿฌ๋ฒˆ์ด๋‚˜ ํ•œ ์œ ์ „์ฒด์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ ์ด๋Ÿฌํ•œ ์„œ์—ด์„ repeat์ด๋ผ ๋ถ€๋ฅธ๋‹ค. Repeat์€ ๋žœ๋ค์œผ๋กœ ์ƒ๊ฒจ๋‚œ ์„œ์—ด์ด๋ผ๊ธฐ์—๋Š” ์ •๋ง ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ๊ฐ„ ์œ ์ „์ฒด์—์„œ ๊ฐ€์žฅ ํ”ํ•œ repeat์€ Alu repeat์ด๋ผ๋Š” ๊ฑด๋ฐ ์ด๊ฒƒ์€ 300 bp ์ •๋„์˜ ๊ธธ์ด์— ํ•œ ์‚ฌ๋žŒ์—๊ฒŒ์„œ 100๋งŒ๋ฒˆ ์ •๋„ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ Alu repeat์€ ์ข‹์€ ์—ญํ• ๋ณด๋‹ค๋Š” ์˜คํžˆ๋ ค ์•…์˜ํ–ฅ์„ ๋ผ์น˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ๋Š”๋ฐ ์ƒˆ๋กœ์šด Alu repeat์ด ์œ ์ „์ฒด์— ์‚ฝ์ž…๋˜์—ˆ์„ ๋•Œ ์œ ์ „์งˆํ™˜์ด ๋ฐœ์ƒํ•˜๋Š”๊ฑธ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ฌธ์ œ (Finding a Motif in DNA)

DNA ์„œ์—ด s์™€ s๋ณด๋‹ค ๊ธธ์ด๊ฐ€ ์งง์€ t ์„œ์—ด์ด ์ฃผ์–ด์ง„๋‹ค. t๊ฐ€ s์—์„œ ๋ช‡๋ฒˆ์งธ ์œ„์น˜์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

์˜ˆ์‹œ

GATATATGCATATACTT
ATAT

์˜ˆ์ƒ ๊ฒฐ๊ณผ

2 4 10

 

ํ•ด๊ฒฐ

def dna_motif(seq, motif):
    ans = []
    # seq์—์„œ motif ๊ธธ์ด์™€ ๊ฐ™์€ ์„œ์—ด์„ ๋ชจ๋‘ ํ™•์ธํ•˜๊ธฐ
    for i in range(len(seq)-len(motif)+1):
        if seq[i:i+len(motif)] == motif:
            ans.append(str(i+1))
    
    return ' '.join(ans)

with open('rosalind_subs.txt', 'r') as f:
    lines = f.readlines()

    print(dna_motif(lines[0].strip(), lines[1].strip()))

 

 

 

๋Œ“๊ธ€