알고리즘

[백준] 1969 - DNA

j9972 2023. 5. 13. 14:22
728x90

1. 문제

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

 

1969번: DNA

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

www.acmicpc.net

 

2. 접근

1. 문제의 의도는 m개의 후보군들과의 Hamming Distance의 값들의 합이 가장 적은 S 하나를 구해라! 이거다

2. 생각해 보니까 m개의 후보군들을 하나씩 인덱스 순서대로 최빈값을 구해서 하나씩 ans ( string ) 에 더해주면 될것같았다

3. 주의할점은 최빈값이 같은 경우인데, 그 경우에는 사전순으로 넣어주면 된다 하니 dict를 초기 세팅시 a -> c -> g -> t 순서로 세팅하면 된다

 

3. 풀이

#1969 실버4
import sys
input = sys.stdin.readline

n,m = map(int,input().split())

dna = []
for i in range(n):
    dna.append(input().rstrip())

ans = ''
cnt = 0

# 가로 -> 세로 순서로 체크
for i in range(m):
    arr = {'A':0, 'C':0, 'G':0, 'T':0}
    for j in range(n):
        if dna[j][i] in arr.keys():
            arr[dna[j][i]] += 1
    max_key = max(arr, key=arr.get)
    ans += max_key
    cnt += (n-arr[max_key])
    #print('max_key :', max_key, 'ans : ', ans, 'cnt :',cnt)
print(ans)
print(cnt)