알고리즘

[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;
}