๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 1969๋ฒˆ - DNA

by ์•ˆ์ฃผํ˜• 2022. 3. 31.

๋ฌธ์ œ

 

1969๋ฒˆ: DNA

DNA๋ž€ ์–ด๋–ค ์œ ์ „๋ฌผ์งˆ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ถ„์ž์ด๋‹ค. ์ด DNA๋Š” ์„œ๋กœ ๋‹ค๋ฅธ 4๊ฐ€์ง€์˜ ๋‰ดํด๋ ˆ์˜คํ‹ฐ๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค(Adenine, Thymine, Guanine, Cytosine). ์šฐ๋ฆฌ๋Š” ์–ด๋–ค DNA์˜ ๋ฌผ์งˆ์„ ํ‘œํ˜„ํ•  ๋•Œ, ์ด DNA๋ฅผ ์ด๋ฃจ๋Š” ๋‰ดํด๋ ˆ์˜ค

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <map>

using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int N, M; cin>>N>>M;
    vector<string>v;
    string dna;
    int hamming_distance_cnt = 0;
    
    for(int i=0; i<N; i++){
        string inp; cin>>inp;
        v.push_back(inp);
    }
    
    for(int i=0; i<M; i++){
        map<char,int> cnt;
        int max_cnt = -1;
        char max_char = 'Z';
        for(int k=0; k<N; k++){
            cnt[v[k][i]]++;
            if(max_cnt<cnt[v[k][i]]){
                max_cnt = cnt[v[k][i]];
                max_char = v[k][i];
            }
            else if(max_cnt==cnt[v[k][i]]){
                max_char = min(max_char, v[k][i]);
            }
        }
        dna += max_char;
    }
    
    for(int i=0; i<M; i++){
        for(int k=0; k<N; k++){
            if(v[k][i]!=dna[i]) hamming_distance_cnt++;
        }
    }
    cout<<dna<<'\n'<<hamming_distance_cnt;
}

 

ํ’€์ด

๊ฐ DNA์—์„œ ๊ฐ€์žฅ ๋นˆ๋„์ˆ˜๊ฐ€ ๋งŽ์€ ์•ŒํŒŒ๋ฒณ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋นˆ๋„์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์šฐ์„ ์ธ ์•ŒํŒŒ๋ฒณ์„ ๋ฝ‘์•„๋ƒ…๋‹ˆ๋‹ค.

Hamming Distance๋Š” ๋ฝ‘์•„๋‚ธ ์•ŒํŒŒ๋ฒณ๋“ค๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋‹ค๋ฅผ ๊ฒฝ์šฐ์˜ ์•ŒํŒŒ๋ฒณ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ „๋ถ€ ์„ธ์–ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๋Œ“๊ธ€