최대 1 분 소요

[백준 1969] DNA

문제 링크

#include "header.h"
using namespace std;
int N, M;
vector <string> str;
void input() {
    cin >> N >> M;
    for(int i=0; i<N; i++) {
        string s;
        cin >> s;
        str.push_back(s);
    }
}
void solve() {
    
    int distance = 0;
    string hamming;

    for(int i=0; i<M; i++) {
        map <char, int> m;
        int cnt = 0;
        char c = 'Z';
        for(int j=0; j<N; j++) {
            m[str[j][i]]++;
            
            if(cnt < m[str[j][i]]) {
                cnt = m[str[j][i]];
                c = str[j][i];
            } else if(cnt == m[str[j][i]]) {
                if((int)c > (int)str[j][i]) c = str[j][i];
            }
        }

        distance += (N - cnt);
        hamming += c;
    }
    cout << hamming << endl << distance << endl;
}
int main () {
    input();
    solve();
    return 0;
}
  • 브루트포스로 푸는 문제.
  • 문제가 좀 헷갈리게 나왔는데, 세로로 탐색하면서 제일 많이 나온 글자가 해밍턴뭐시깽이가 된다.
  • 세로를 모두 탐색 하면 제일 많이 나온 글자들로 문자열이 생성되는데,
  • (세로로 탐색하면서) 그 글자와 다른 글자의 갯수의 누적합이 답이다.
  • 이 때, 다른 글자의 갯수가 같다면 사전순으로 정렬 해야 한다.
  • 정렬 하기 위해서 c를 Z로 초기화 시켜두고, 아스키 코드 번호를 비교했다.

카테고리:

업데이트: