문제해결(PS)/ROSALIND

Overlap Graphs (오버랩 그래프)

곰탱이장 2024. 7. 28. 12:56

https://rosalind.info/problems/grph/

 

ROSALIND | Overlap Graphs

It appears that your browser has JavaScript disabled. Rosalind requires your browser to be JavaScript enabled. Overlap Graphs solved by 12057 2012년 7월 2일 12:00:00 오전 by Rosalind Team Topics: Graph Algorithms A Brief Introduction to Graph Theory N

rosalind.info

 이 문제는 Ok에서 k만큼 각 서열이 끝부분과 시작부분이 겹치는지 알아내는 문제이다. 여기선 O3이므로 앞뒤로 3씩 잘라서 비교해본다. 예를 들어본다면 0498은 AAATAAA 이고 2391은 AAATTTT이므로 서로 오버랩된다고 본다. 이 문제 또한 이러한 점만 안다면 차분하게 코딩해서 풀면 된다.

from Bio import SeqIO
from collections import defaultdict

seq_list = SeqIO.parse(r'파일경로','fasta')
fdic={}#앞부분 저장 id:서열
edic=defaultdict(list)#뒷부분 저장 서열:id

for seq in seq_list:#서열을 돌면서
    sid=seq.id
    sseq=str(seq.seq)
    front , end = sseq[:3],sseq[-3:]
    fdic[sid]=front
    edic[end]=edic[end]+[sid]

for id1 in fdic.keys():#앞부분의 id를 돌면서
    if fdic[id1] in edic.keys():#그 id의 앞서열과 똑같은 뒷서열이 있다면
        for id2 in edic[fdic[id1]]:#그 뒷서열의 id를 돌면서
            if id1 == id2:#같은 서열은 제외
                continue
            print(id2,id1)#출력