실버작 2
Hamming Distance 자체는 좀 귀찮은 개념이긴 한데
이 문제에선 굳이 Hamming Distance를 구할 필요가 없다.
그냥 각 문자 자리에서 가장 많이 등장하는 문자를
Hamming Distance의 합이 가장 작은 DNA의 문자자리에 그대로 넣어주기만 하면 된다
#include <bits/stdc++.h>
using namespace std;
char arr[1234][56] = {0};
char ans[56] = {0};
int a,c,g,t;
int main(){
int n,m;
scanf("%d %d", &n, &m);
for(int i=0; i<n; i++){
scanf("%s", &arr[i]);
}
int var = 0;
for(int i=0; i<m; i++){
a=0;
c=0;
g=0;
t=0;
for(int j=0; j<n; j++){
//printf("[%c]", arr[j][i]);
if(arr[j][i] == 'A') a++;
if(arr[j][i] == 'C') c++;
if(arr[j][i] == 'G') g++;
if(arr[j][i] == 'T') t++;
}
if(max({a,c,g,t}) == a){
ans[i] = 'A';
var += (c+g+t);
}
else if(max({a,c,g,t}) == c){
ans[i] = 'C';
var += (a+g+t);
}
else if(max({a,c,g,t}) == g){
ans[i] = 'G';
var += (a+c+t);
}
else{
ans[i] = 'T';
var += (a+c+g);
}
}
printf("%s\n", ans);
printf("%d", var);
return 0;
}
쓸데없이 코드길이가 긴 문제....
반응형