BOJ

백준 1969 - DNA

yanJuicy 2019. 4. 10. 23:15
반응형

문제

https://www.acmicpc.net/problem/1969

 

1969번: DNA

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

www.acmicpc.net

 

풀이

 

열끼리 비교해서 다를 때 Hamming Distance가 발생한다.

따라서 각각의 DNA 문자열에서 열끼리 비교해서 가장 많이 나온 알파벳을 고르면 된다.

그러면 최소의 Hamming Distance가 된다.

 

 

코드

c++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
 
using namespace std;
 
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
 
    int N, M;
    cin >> N >> M;
 
    char DNA[1000][51];
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            cin >> DNA[i][j];
        }
    }
 
    // ACGT
    int index = 0;
    int count = 0;
 
    char result[51];
    char choice[4= { 'A''C''G''T' };
 
    for (int i = 0; i < M; i++)
    {
        int ACGT[4= { 0 };
        for (int j = 0; j < N; j++)
        {
            if (DNA[j][i] == 'A') ACGT[0]++;
            else if (DNA[j][i] == 'C') ACGT[1]++;
            else if (DNA[j][i] == 'G') ACGT[2]++;
            else ACGT[3]++;
        }
 
        int max = 0;
        for (int i = 1; i < 4; i++)
        {
            if (ACGT[max] < ACGT[i])
                max = i;
        }
 
        for (int i = 0; i < 4; i++)
        {
            if (max == i)
                continue;
            count += ACGT[i];
        }
 
        result[index++= choice[max];
    }
 
    cout << result << '\n' << count;
 
    return 0;
}
 
cs
반응형

'BOJ' 카테고리의 다른 글

백준 1463 - 1로 만들기  (0) 2019.05.12
백준 3085 - 사탕 게임  (0) 2019.05.12
백준 1912 - 연속합  (0) 2019.05.07
백준 2217 - 로프  (0) 2019.04.10
백준 1449 - 수리공 항승  (0) 2019.04.09