본문 바로가기
알고리즘/완전탐색

[백준][Python] 1969번 DNA

by 임짠짠 2022. 7. 6.
반응형
 

1969번: DNA

DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오

www.acmicpc.net

 

 

 

코드

n,m = map(int,input().split())
dna_list = []
hd = 0
ans = []
for i in range(n):
	dna = list(input())
	dna_list.append(dna)
for i in range(m):
	cnt = {'A':0,'C':0,'G':0,'T':0}
	sum = 0
	for j in range(n):
		cnt[dna_list[j][i]] += 1
	for k in cnt.values():
		sum += k
	sum -= max(cnt.values())	
	hd += sum
	ans.append(max(cnt,key=cnt.get))

for i in ans:
	print(i,end='')
print()
print(hd)

 

설명

각 DNA의 앞글자부터 차례대로 A, C, G, T 가 나온 수를 구해서 가장 많이 나온 문자를 골라야 hamming distance가 최소가 된다.

딕셔너리에 각 문자의 등장 횟수를 저장해두고 max(cnt, key=cnt.get)을 이용해서 가장 많이 등장한 문자를 ans 리스트에 넣었다. 이때 hamming distance도 구해야 하므로 딕셔너리에 있는 모든 value 값을 더해준 뒤 가장 큰 value 값은 빼주었다.

반응형

댓글