BruteForce_06_DNA(1969)

Eugenius1st·2022년 5월 23일
0

Algorithm_Baekjoon

목록 보기
115/158
post-thumbnail

BruteForce_06_DNA(1969)

문제

입력

첫 줄에 DNA의 수 N과 문자열의 길이 M이 주어진다. 그리고 둘째 줄부터 N+1번째 줄까지 N개의 DNA가 주어진다. N은 1,000보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다.

출력

첫째 줄에 Hamming Distance의 합이 가장 작은 DNA 를 출력하고, 둘째 줄에는 그 Hamming Distance의 합을 출력하시오. 그러한 DNA가 여러 개 있을 때에는 사전순으로 가장 앞서는 것을 출력한다.

풀이

  • 문자열 각 자리수를 검사해서 가장 많이 나온 알파벳을 result에 넣어준다.
  • A, C, G, T 만 입력받으므로 a리스트는 4까지만 만들어도 된다.
  • 근데 그렇게하면 코드가 길어질거같아서 그냥 26까지 만들었다.

코드

import sys
sys.stdin = open("input.txt", "rt")
input = sys.stdin.readline
n, m = map(int, input().split())
s = []
result = ""
cnt = 0
for i in range(n):
    a = input()
    s.append(a.upper()) # 문자열에 string 넣기 >> 이차원 배열처럼 j열 i행 조회 가능
    print(s)
for i in range(m):
    a = [0 for i in range(26)] # 알파벳 크기 배열
    print(a)
    for j in range(n):
        a[ord(s[j][i]) - 65] += 1 # 해당 알파벳 index에 1을 더하라
    result += chr(a.index(max(a)) + 65) # 알파벳 index에 아스키코드를 통해 문자로 변환
for i in range(n):
    for j in range(m):
        if s[i][j] != result[j]:
            cnt += 1
print(result)
print(cnt)

profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글