Problem
DNA서열 "AGCTATAG"의 GC비율을 37.5%= 3/8*100
가장 높은 GC-콘텐츠를 가진 문자열의 ID와 그 문자열의 GC-콘텐츠를 반환합니다
Sample Dataset
>Rosalind_6404
nCCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCTATATCCATTTGTCAGCAGACACG
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT
Sample Output
Rosalind_0808
60.919540
내가 쓴 답
#파일 줄바꿈 없이 한번에 받기
with open('rosalind_gc.txt', 'r') as f :
line = f.read().replace('\n', '').split('>')
line = line[1:len(line)] # line[0]이 ''로 나오길래 없애줌
#이름만 받기
name=[]
seq=[]
for i in range(len(line)) :
name.append(line[i][0:13])
seq.append(line[i][13:])
#GC count세기
content=[]
for j in range(10):
count = 0
for i in range(len(seq[j])) :
if 'G' == seq[j][i] or 'C'==seq[j][i] :
count+=1
content.append(count/len(seq[j])*100)
# 답 출력하기
max_cg = max(content)
index = content.index(max_cg)
print(f'{name[index]}', f'{content[index]:.6f}', sep='\n')
추천 많이 받은 답 by Gaik Tamazian
f = open('rosalind_gc.txt', 'r')
max_gc_name, max_gc_content = '', 0
buf = f.readline().rstrip()
while buf:
seq_name, seq = buf[1:], ''
buf = f.readline().rstrip()
while not buf.startswith('>') and buf:
seq = seq + buf
buf = f.readline().rstrip()
seq_gc_content = (seq.count('C') + seq.count('G'))/float(len(seq))
if seq_gc_content > max_gc_content:
max_gc_name, max_gc_content = seq_name, seq_gc_content
print('%s\n%.6f%%' % (max_gc_name, max_gc_content * 100))
f.close()
이 코드로 실행하면 뒤에 %가 붙어서 출력되긴 하지만 내가 푼 방식 보다 Rosalind에서 의도한 풀이법임(값을 비교하여 큰값을max에 넣음)
반응형