BOJ1969 DNA

xo님의 도움을 받아 풀었다.

모든 문자열의 i번째 열의 알파벳 등장빈도가 가장 낮은 알파벳을 구한다. 그럼 해밍거리의 최소 값을 구할 수 있다.

## N 들어오는 문자열의 갯수, M 들어오는 문자열의 길이
N, M = map(int, input().split())

## DNA 알파벳의 조합
elem = [input() for i in range(N)]

## 문제를 푸는 부분
hamming = []
for i in range(M):
	alp = [0] * 26
	
	## A ~ T 빈도수 판단
	for j in range(N):
		alp[ord(elem[j][i])-65] += 1

	## 빈도수 최대인 단어를 찾고 바로 break
	## 만약 최대 빈도수가 동일하면 가까운 단어를 선택한다.
	mx = max(alp)
	for j in range(26):
		if mx == alp[j]:
			hamming.append(chr(j+65))
			## 찾았으면 꼭 break
			break

## 해밍 문자와 i번째 문자들이 다르면 허밍 단어 갯수 1증가시킴
ans = 0
for i in range(M):
	for j in range(N):
		if elem[j][i] != hamming[i]:
			ans += 1
print(''.join(hamming))
print(ans)

좋은 웹페이지 즐겨찾기