[문제]

https://www.acmicpc.net/problem/1969

 

1969번: DNA

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

www.acmicpc.net

 


[풀이]

DNA 리스트를 열 단위로 봤을 때 가장 많을 것을 한 개씩 고른다. 예를 들어 첫 번째 열에서 문자 A가 가장 많을 경우 결과로 출력될 첫 번째 문자는 A가 된다.

Hamming Distance의 합은 DNA의 수 n에서 가장 많이 나온 문자의 개수 max(A)를 빼면 가장 많이 나온 문자와 일치하지 않는 갯수가 나온다. 

 


[코드]

if __name__ == '__main__':
    n, m = map(int, input().split())
    DNA = []
    for _ in range(n):
        DNA.append(input())

    cnt = 0
    result = ''
    for i in range(m):
        A = [0, 0, 0, 0]  # A, C, G, T 개수
        for j in range(n):
            if DNA[j][i] == 'A':
                A[0] += 1
            elif DNA[j][i] == 'C':
                A[1] += 1
            elif DNA[j][i] == 'G':
                A[2] += 1
            elif DNA[j][i] == 'T':
                A[3] += 1
        idx = A.index(max(A))
        if idx == 0:
            result += 'A'
        elif idx == 1:
            result += 'C'
        elif idx == 2:
            result += 'G'
        elif idx == 3:
            result += 'T'
        cnt += n - max(A)

    print(result)
    print(cnt)