#include<iostream>
#include<string.h>
#include<vector>
#include<string>
using namespace std;
int main() {
std::ios::sync_with_stdio(false);
int test = 0;
int cnum = 0;//코드개수(알파벳 개수)
int length = 0;//코드 길이
vector<string>code;
int hammingdist[26];
string result;
//인코딩된 비트열
int incodenum = 0;
char bits[1025];
cin >> test;
for (int i = 0; i < test; i++) {
code.clear();
memset(hammingdist, 0, sizeof(hammingdist));
memset(bits, 0, sizeof(bits));
result = "";
cin >> cnum >> length;
for (int i = 0; i < cnum; i++) {
string c;
cin >> c;
code.push_back(c);
}
cin >> incodenum;
for (int m = 0; m < incodenum; m++) {
cin >> bits[m];
}
//incodenum/length해서 인코딩된 문자열 개수를 이용해야 한다.
for (int p = 0; p < (incodenum / length); p++) {
memset(hammingdist, 0, sizeof(hammingdist));
int min = 128;
int min_idx = 26;
for (int q = 0; q < cnum; q++) {
for (int r = 0; r < length; r++) {
char a = bits[(p*length) + r];//이 인코딩된 문자열들이 전에는 어떤 문자열이었을지 알아야 한다.
char b = code[q][r];
if (a != b) {
hammingdist[q]++;
}
}
if (hammingdist[q] < min) {
min = hammingdist[q];
min_idx = q;
}
}
char res = 'A' + min_idx;
result = result + res;
}
cout << result << endl;
}
}
'Computer Science > 알고리즘(백준+프로그래머스)' 카테고리의 다른 글
week 7- 수열 조합 & 계획 쇼핑의 제왕 (0) | 2020.05.11 |
---|---|
문제해결기법 3주차) 움직이는 하노이의 탑 (0) | 2020.04.05 |
[문제해결 기법 1주차] 과소비 알람 (0) | 2020.04.01 |
[문제해결기법 1주차] DNA (0) | 2020.03.26 |
[문제해결기법 2주차] Game (0) | 2020.03.26 |