주의할 점
: DNA s1,s2....sn 중 Hamming Distance의 합이 가장 작은 DNA si를 찾는 것이 아니라, 가장 작은 DNA s를 구하는 것이다. 처음에 문제를 잘못 이해해서 잘못 풀었다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int n, m;
string s[1001];
char result[1001];
int ncount[4];
int main(void) {
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> s[i];
}
int hammingD = 0;
for (int i = 0; i < m; i++) {
fill(ncount, ncount + 4, 0);
for (int j = 0; j < n; j++) {
switch (s[j][i])
{
case 'A':
ncount[0]++;
break;
case 'C':
ncount[1]++;
break;
case 'G':
ncount[2]++;
break;
case 'T':
ncount[3]++;
break;
}
}
int maxv = 0;
int maxIndex = 0;
for (int k = 0; k < 4; k++) {
if (ncount[k] > maxv) {
maxv = ncount[k];
maxIndex = k;
}
}
if (maxIndex == 0) result[i] = 'A';
else if (maxIndex == 1) result[i] = 'C';
else if (maxIndex == 2) result[i] = 'G';
else result[i] = 'T';
hammingD += (n - maxv);
}
for (int i = 0; i < m; i++) {
cout << result[i];
}
cout << '\n' << hammingD;
}
디버깅 기록
: 배열의 value값과 index값을 혼동하지말자. 정말 기본 중의 기본, 기초인데 자주 실수한다. 반복문을 사용하는 경우에는 꼭!꼭!꼭! 초기화해줘야 하는 값이 있지는 않은지 두 번, 세 번 확인하자. 여기서도 ncount배열을 초기화 하지 않아서 초반에 오류가 났다.
'STUDY > 코딩테스트 연습(PS)' 카테고리의 다른 글
프로그래머스/네트워크(DFS,BFS)/C++ (0) | 2021.03.31 |
---|---|
프로그래머스/기능개발(스택,큐)/C++ (0) | 2021.03.30 |
백준/1541번(Greedy)/C++ (0) | 2021.03.01 |
백준/1138번(Greedy)/C++ (0) | 2021.02.28 |
백준/2252번(위상 정렬)/C++ (0) | 2021.02.19 |