https://www.acmicpc.net/problem/1969
https://jaimemin.tistory.com/762
-> 모든 경우의 수를 다 탐색하는 브루트포스라고 할수 있다.
#include <iostream>
#include<string>
#include<vector>
#include<string.h>
using namespace std;
int main() {
int t = 0;
int m = 0;
int n=0;
int gene[4]; // 저장할 각 염기 서열
vector<string>v;
string dna = "";
int dist = 0;
//m이 넣는 서열 개수, n이 염기 서열들의 길이
cin >> t;
while (t--) {
v.clear();
memset(gene, 0, sizeof(gene));
dist = 0;
dna = "";
cin >> m >> n;
for (int i = 0; i < m; i++) {
string str;
cin >> str;
v.push_back(str);
}//초기화 안했더니 계속틀림 유의
for (int i = 0; i < n; i++) {
memset(gene, 0, sizeof(gene));//서열 각각위치에서 계속 초기화시켜줘야함
for (int j = 0; j < m; j++) {
char c = v[j][i];//j개의 염기들을 비교하며 각각 i위치에 있는 염기가 무엇인지 파악해야함
if (c == 'A') {
gene[0]++;
}
else if (c == 'C') {
gene[1]++;
}
else if (c == 'G') {
gene[2]++;
}
else if (c == 'T') {
gene[3]++;
}
}
int max = gene[0];
int idx = 0;
for (int i = 1; i < 4; i++) {
if (gene[i] > max) {//크거나 같음 처리 안해서 a의 개수==c의 개수 여도 a가 최댓값
idx = i;
max = gene[i];
}
}
// 개수가 같다면 알파벳순으로 처리!! a,c,g,t순으로 처리됨
if (idx == 0) {
dna = dna + 'A';
for (int j = 0; j < m; j++) {
//해밍거리 추가
char c = v[j][i];// ex) v[0] string에서 대표서열과 첫번째 자리가 다르면 해밍거리 추가
if (c != 'A') {
dist++;
}
}
}
if (idx == 1) {
dna = dna + 'C';
for (int j = 0; j < m; j++) {
//해밍거리 추가
char c = v[j][i];
if (c != 'C') {
dist++;
}
}
}
if (idx == 2) {
dna = dna + 'G';
for (int j = 0; j < m; j++) {
//해밍거리 추가
char c = v[j][i];
if (c != 'G') {
dist++;
}
}
}
if (idx == 3) {
dna = dna + 'T';
for (int j = 0; j < m; j++) {
//해밍거리 추가
char c = v[j][i];
if (c != 'T') {
dist++;
}
}
}
}
cout << dna << '\n' << dist << '\n';
}
}
-> 백준문제랑 개똑같다 ㅂㄷㅂㄷ..백준 열심히 풀자ㅠㅠㅠㅠㅠ!!!
'Computer Science > 알고리즘(백준+프로그래머스)' 카테고리의 다른 글
[문제해결기법 2주차] Error (0) | 2020.04.05 |
---|---|
[문제해결 기법 1주차] 과소비 알람 (0) | 2020.04.01 |
[문제해결기법 2주차] Game (0) | 2020.03.26 |
백준 2751) 수 정렬하기 2 (0) | 2020.01.09 |
백준 2750- 정렬 문제 (0) | 2020.01.08 |