알고리즘
[C++] 백준 1969번 DNA
J3SUNG
2019. 11. 23. 12:19
728x90
그리디 문제입니다.
문자열과 가장 많이 일치하는 문장을 만들고
각 문자들과 비교해서 다른 글자가 몇개인지 찾는 문제입니다.
각 문자의 n번째에서 어떤 문자가 가장 큰지 찾아서
그 문자들을 전부 합친 문자가 가장 많이 일치하는 dna가 됩니다.
그리고 dna와 각 문자를 비교해서 다를 때마다 카운트를 해서 출력해주었습니다.
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
using namespace std;
int main(int argc, char* argv[])
{
int n, m;
int index;
int count = 0;
int maxAlph;
int maxIndex;
int check[26];
string s;
string dna = "";
vector<string> v;
cin >> n >> m;
for (int i = 0; i < n; ++i) {
cin >> s;
v.push_back(s);
}
for (int i = 0; i < m; ++i) {
maxAlph = 0;
memset(check, 0, sizeof(check));
for (int j = 0; j < n; ++j) {
index = v[j][i] - 'A';
++check[index];
}
for (int j = 0; j < 26; ++j) {
if (maxAlph < check[j]) {
maxAlph = check[j];
maxIndex = j;
}
}
dna += 'A' + maxIndex;
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (v[i][j] != dna[j]) {
++count;
}
}
}
cout << dna << endl;
cout << count << endl;
return 0;
}