[백준/파이썬] 1969번 DNA 풀이

업데이트:



문제 정보


풀이

문제

여러 DNA 문자열이 주어질 때 해밍 거리를 최소화하는 대표 DNA 문자열과 그 최소 해밍 거리 합을 구하는 문제입니다.

코드

n, m = map(int, input().split())
a = [0]*m
c = [0]*m
g = [0]*m
t = [0]*m

for _ in range(n):
    dna = input()
    for i in range(len(dna)):
        if dna[i] == 'A': a[i] += 1
        elif dna[i] == 'C': c[i] += 1
        elif dna[i] == 'G': g[i] += 1
        else: t[i] += 1

hd = 0
for i in range(m):
    if a[i] >= c[i] and a[i] >= g[i] and a[i] >= t[i]:
        print('A', end="")
        hd += a[i]
    elif c[i] >= a[i] and c[i] >= g[i] and c[i] >= t[i]:
        print('C', end="")
        hd += c[i]
    elif g[i] >= a[i] and g[i] >= c[i] and g[i] >= t[i]:
        print('G', end="")
        hd += g[i]
    else:
        print('T', end="")
        hd += t[i]
print()

print(n*m-hd)

설명

각 열마다 A/C/G/T 등장 횟수를 세고 가장 많은 문자를 대표 문자열 문자로 선택합니다.

선택된 문자 수의 합을 hd에 누적하면 전체 문자 수 n*m에서 빼서 최소 해밍 거리 합을 구할 수 있습니다.



댓글남기기