[문제]
https://www.acmicpc.net/problem/1969
[풀이]
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)
'문제풀이 > BOJ' 카테고리의 다른 글
[Python] BOJ/백준 1789번 수들의 합 (0) | 2021.07.19 |
---|---|
[Python] BOJ/백준 1769번 3의 배수 (0) | 2021.07.19 |
[Python] BOJ/백준 1380번 귀걸이 (0) | 2021.07.18 |
[Python] BOJ/백준 2720번 세탁소 사장 동혁 (0) | 2021.07.16 |
[Python] BOJ/백준 2547번 사탕 선생 고창영 (1) | 2021.07.15 |