문제
https://www.acmicpc.net/problem/1969
소스코드
import sys
input = sys.stdin.readline
if __name__ == "__main__":
n,m = map(int,input().split())
dna = [input() for _ in range(n)]
res = [] #결과 dna
resnum = 0 #Hamming Distance의 합
for i in range(m): #배열 순서대로 체크
nucle = {'A': 0, 'C': 0, 'G': 0, 'T': 0} #뉴클레오티드 초기화
for j in range(n): #각 DNA 체크
nucle[dna[j][i]]+=1
maxval = nucle['A'] #가장 많이 나온 뉴클레오디드가 정답이기 때문에 딕셔너리에서 가장 큰 값을 찾아준다
resval = 'A' #초기값을 A로 둬서 사전순으로 체크되게 함
for k,y in nucle.items():
if y > maxval:
maxval = y
resval = k
res.append(resval)
resnum += (n - maxval) #전체 dna수에서 가장 많이 나온 뉴클레오티드를 제외한 값
print("".join(res))
print(resnum)
설명
내가 구할 dna를 하나 세팅한다.
각 자리에 올 수 있는 뉴클레오티드는 4가지이고 4가지일 때 문제에서 주어진 dna와 모두 비교하면서 가장 많이 나온 뉴클레오티드를 선택해주면 해밍코드가 가장 적은 값을 찾을 수 있다.
각 자리마다 해밍코드가 작으면 총합을 더했을 때 전체 해밍코드가 작은 dna를 찾을 수 있다.
각 자리마다 뉴클레오 딕셔너리를 초기화해주어서 값을 찾는다.
'Algorithm' 카테고리의 다른 글
[백준][python]1937 욕심쟁이 판다 (0) | 2023.05.17 |
---|---|
[백준][python]14502 연구소 (1) | 2023.05.16 |
[백준][python]14501 퇴사 (0) | 2023.05.10 |
[백준][python]15684 사다리 조작 (0) | 2023.04.27 |
[백준][python]14500 테트로미노 (0) | 2023.04.26 |