본문 바로가기

코딩테스트 문제풀이

[백준 1969] DNA

#include 
#include 
#include 

using namespace std;

int main() {
int N, M;
cin >> N;
cin >> M;

string* str = new string[N];
char ch_n;
char ch_o = NULL;
int cnt_n = 0;
int cnt_o = -1; //첫번째 값은 무조건 비교하기 위함.

string sol = "";
int result = 0;

for (int i = 0; i < N; i++) {
cin >> str[i];
}

for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
ch_n = str[j][i];
if (ch_n == ch_o) continue;
for (int k = 0; k < N; k++) {
if (ch_n == str[k][i] && j!=k) {
cnt_n++;
}
}
/*cout << "ch_n is " << ch_n << endl;
cout << "cnt_n is " << cnt_n << endl;*/
if (cnt_n > cnt_o) {
ch_o = ch_n;
cnt_o = cnt_n;
}
else if (cnt_n == cnt_o) {
if (ch_n < ch_o) {
ch_o = ch_n;
cnt_o = cnt_n;
}
}
ch_n = NULL;
cnt_n = 0;
}
sol += ch_o;
//cout << "cnt_o is " << cnt_o << endl;
result += N - (cnt_o + 1);
//cnt_o는 자신과 같은 값을 누적한 것이므로 줄 수 - (자기 + 같은값)으로 계산하면 자신과 다른 값들의 개수를 알 수 있다.
ch_o = NULL;
cnt_o = -1;
//한 라인 비교 끝.
}
cout << sol << endl;
cout << result;
delete[] str;
}

'코딩테스트 문제풀이' 카테고리의 다른 글

[백준 16235] 나무 재테크  (0) 2019.10.12
[백준 16234] 인구 이동  (0) 2019.10.12
[백준 1026] 보물  (0) 2019.10.12
[백준 1439] 문제 풀기 (그리디)  (0) 2019.07.08
[백준 1969] 문제 풀기 (그리디)  (0) 2019.07.03