Koder / 박성훈
article thumbnail
Published 2021. 7. 3. 20:48
백준 BOJ 1969 - DNA 알고리즘/백준 BOJ

실버작 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;
}

쓸데없이 코드길이가 긴 문제....

 

반응형