1969 DNA

장종민·2023년 8월 1일

boj

목록 보기
4/22


처음에 문제보고... 도대체 무슨소리인가 이해하는데 20분걸렸다. ㅎㅎ

풀이 1.

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

arr = []

# DNA 입력
for i in range(n):
    arr.append(list(map(str, input())))

result = ''
hamming_distance = 0
# DNA에 길이만큼 실행
for i in range(m):
    
    # 각 DNA에 자리위치에 제일 많이 들어있는 글자 구하기
    a, c, g, t = 0, 0, 0, 0
    for j in range(n):
        if arr[j][i] == 'T':
            t += 1
        elif arr[j][i] == 'A':
            a += 1
        elif arr[j][i] == 'G':
            g += 1
        elif arr[j][i] == 'C':
            c += 1
    
    # 제일 많이 들어간 글자
    max_character_cnt = max(a, t, g, c)  # 개수

    if max_character_cnt == a:
        result += 'A'
        hamming_distance += (g + c + t)
    elif max_character_cnt == c:
        result += 'C'
        hamming_distance += (g + a + t)
    elif max_character_cnt == g:
        result += 'G'
        hamming_distance += (a + c + t)
    elif max_character_cnt == t:
        result += 'T'
        hamming_distance += (g + c + a)
    
print(result)
print(hamming_distance)

풀이 2.

N, M = map(int, input().split())

dna = [input() for _ in range(N)]

cnt = 0
res = ""
for i in range(M):
    t_dict = dict()
    for j in range(N):
        tmp = dna[j][i]
        if tmp in t_dict:
            t_dict[tmp] +=1
        else:
            t_dict[tmp] = 1
    li = sorted(t_dict.items(),key=lambda x: (-x[1],x[0]))
    res += li[0][0]
    cnt += N-li[0][1]

print(res)
print(cnt)
profile
비전공 오르미부트캠프 2기

0개의 댓글