[BOJ/Python] 1969 : DNA

정나영·2023년 8월 9일
0

👉 문제 링크

👉 아이디어

문제 이해하는 데 시간이 참 많이 걸렸다.
구해야하는 Hamming Distance의 합이 가장 작은 DNA는 가장 많이 나온 문자이고, Hamming Distance는 가장 많이 나온 문자를 제외한 문자의 수다.
그래서 예제 1의 답은 TAAGATAC, 7인 것!

👉 전체 코드

반복문의 범위 설정에 유의! 비교해야할 문자열은 세로줄이므로 m의 범위로 우선 설정해야 하는 것이다.

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

arr = []
result,d = [],0 # d는 Hamming Distance
for _ in range(n):
    arr.append(input())

for i in range(m):
    a,t,g,c = 0,0,0,0 # 각 문자의 빈도수를 카운팅할 변수 설정
    for j in range(n):
        if arr[j][i] == 'A':
            a+=1
        if arr[j][i] == 'T':
            t+=1
        if arr[j][i] == 'G':
            g+=1
        if arr[j][i] == 'C':
            c+=1
    
    if max(a,t,g,c) == a:
        result += 'A'
        d += c+g+t
    elif max(a,t,g,c) == c:
        result += 'C'
        d += a+t+g
    elif max(a,t,g,c) == g:
        result += 'G'
        d += a+t+c
    elif max(a,t,g,c) == t:
        result += 'T'
        d += a+g+c
    
print(''.join(result))
print(d)

또한,,,
a,t,g,c의 최댓값을 비교할 때에는 if-elif를 써야한다는 것!
if-if를 쓰는 실수를 조심하세요!

0개의 댓글