[백준] 1969 : DNA - Python

Chooooo·2022년 9월 23일
0

알고리즘/백준

목록 보기
6/182
post-thumbnail

문제 해결
이 문제는 N개의 DNA가 입력되면 각 열마다 서로 다른 4가지 문자의 개수를 확인하고 각 열마다 가장 많이 등장하는 문자를 채택하면 되는 것이다.
사전 순으로 정렬하기 위해 A C G T순으로 확인 -- index메서드를 통해 가장 먼저 등장하는 값을 채택할 것이므로 사전 순으로 확인 가능해짐.
DNA는 해당 문자가 가장 많이 등장한 문자를 채택하는 것이고, Hamming Distance는 나머지 문자의 개수이다.

생각
처음에 문제 자체를 이해하지 못했었다.. 코드를 문제 읽자마자 치는 것이 아닌 문제를 완전히 해석한 후에 풀도록 하자.

import sys

sys.stdin = open("input.text", "rt")

#DNA 리스트를 열 단위로 봤을 때 가장 많은 것을 하나씩 고르는 문제였음. 문제이해를 제대로 못했음
#해밍 distance가 가장 작아야 하므로 같은게 가장 많아야함.

N, M = map(int, input().split())
data = []
for _ in range(N):
    data.append(input())

res = []
cnt = 0
for i in range(M):   #열을 기준으로 확인해야 하므로 
    count = [0,0,0,0]   #A C G T    같다면 사전순 반환해야해서.   
    for j in range(N):
        if data[j][i] == "A":
            count[0] += 1
        elif data[j][i] == "C":
            count[1] += 1
        elif data[j][i] == "G":
            count[2] += 1
        elif data[j][i] == "T":
            count[3] += 1   
    idx = count.index(max(count))   #가장 큰 값의 인덱스를 반환. 
  #  index메서드는 지정 값이 처음으로 나오는 값을 반환 그렇기에 사전순 가능! 없는 경우 에러. fnid는 똑같지만 없는경우 -1반환
    if idx == 0:
        res.append("A")
    elif idx == 1:
        res.append("C")
    elif idx == 2:
        res.append("G")
    elif idx == 3:
        res.append("T")
    cnt += N - max(count)

for x in res:
    print(x, end = "")
print()
print(cnt)
profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글