본문 바로가기
Algorithm

[문자열/Brute Force] 백준 1969 DNA - 파이썬(Python)

by jangThang 2022. 3. 6.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1969번: DNA

    DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     여러 DNA들간의 헤밍거리가 최소인 DNA를 만들고, 그 헤밍거리의 합을 출력하는 문제입니다.

     

    2022.01.16 - [Algorithm] - [Algorithm] 브루트 포스(Brute Force)는 노가다 기법?

     

    [Algorithm] 브루트 포스(Brute Force)는 노가다 기법?

    [ Contents ] 1. 브루트 포스란?  Brute(짐승 같은, 난폭한) + Force(힘, 폭력)의 합성어입니다. 무식하게 푸는 기법으로, '노가다'에 가까운 접근법입니다. 모든 경우의 수를 시험해보며 문제를 해결합니

    star7sss.tistory.com

     DNA 염기서열은 [A, C, G, T] 중 하나로 구성되므로, 경우의 수가 4가지입니다. 브루트포스 방법으로 일일이 비교해본 뒤, 가장 헤밍거리가 작은 DNA조합을 찾을 수 있습니다.

     

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    #입력
    N, M = map(int, input().split())
    dna = []
    for _ in range(N):
        dna.append(input().rstrip())
    
    res = ''
    hammingDistSum = 0
    
    #헤밍거리 계산
    for i in range(M):
        hammingDist = {'A': 0, 'C': 0, 'G': 0, 'T': 0}
        for j in range(N):
            hammingDist[dna[j][i]] += 1
        res += max(hammingDist, key=hammingDist.get)
        hammingDistSum += (N - max(hammingDist.values()))
    print(res)
    print(hammingDistSum)

     저는 각 DNA별 i자리의 뉴클레오티드를 조사하고, A/C/G/T 중 가장 많은 걸 배치했습니다. DNA가 여러 개 있을 경우, 사전순으로 가장 앞서는 걸 출력해야하므로, 딕셔너리 순서는 A C G T로 해야 합니다.

     

     

    star가 되고나서 Tistory

    반응형

    댓글