더보기
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N, M;
vector<char> DNA;
int main()
{
cin >> N >> M;
char dna;
vector<char> result;
char AGCT[4] = { 'A', 'C', 'G', 'T' };
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> dna;
DNA.push_back(dna);
}
}
for (int i = 0; i < M; i++) {
int a = 0;
int g = 0;
int c = 0;
int t = 0;
for (int j = 0; j < N; j++) {
if (DNA[i + j * M] == 'A') {
a++;
}
else if (DNA[i + j * M] == 'C') {
c++;
}
else if (DNA[i + j * M] == 'G') {
g++;
}
else if (DNA[i + j * M] == 'T') {
t++;
}
}
vector<int> count;
count.push_back(a);
count.push_back(c);
count.push_back(g);
count.push_back(t);
int max = a;
int max_num = 0;
for (int x = 1; x < 4; x++) {
if (max < count[x]) {
max = count[x];
max_num = x;
}
}
result.push_back(AGCT[max_num]);
count.clear();
}
for (int i = 0; i < size(result); i++) {
cout << result[i];
}
int cc = 0;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
if (result[i] != DNA[i + j * M]) {
cc++;
}
}
}
cout << endl;
cout << cc;
}
더보기
1. Hamming Distance의 합이 가장 작은 DNA를 출력
예시)
N = 5 M = 8
1. TATGATAC
2. TAAGCTAC
3. AAAGATCC
4. TGAGATAC
5. TAAGATGT
각 DNA의 (1~5번 DNA) 1 ~ 8 (1 ~ M) 번째 [A, C, G, T] 개수를 세고 난 후 개수가 제일 큰 알파벳을 출력하게 한다.
결과 DNA : T A A G A T A C
만약 갯수가 같은 경우에 철자 순으로 뽑아내야 하기 때문에 A, C, G, T 순서로 저장을 해야 한다.
위에 나온 결과를 토대로 2중 for문을 돌려서 N번째 DNA와 결과 DNA가 같지 않을 경우를 세어줘서 출력한다.
'Koala - 2기 > B반' 카테고리의 다른 글
[2225번] 합분해 (0) | 2021.01.19 |
---|---|
[2225번] 합분해 (0) | 2021.01.18 |
KOALA B반 - 1.18 미팅 (0) | 2021.01.18 |
[2992번] 크면서 작은 수 (0) | 2021.01.15 |
[1969번] DNA (0) | 2021.01.14 |