본문 바로가기

Algorithm/String

(C++) - 백준(BOJ) 1969번 : DNA

반응형

https://www.acmicpc.net/problem/1969

 

1969번: DNA

DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오

www.acmicpc.net

구현 문제였습니다.

 

풀이방법

 1. 입력을 모두 받으면 N행 M열의 형태로 문자열들이 저장되게 됩니다.

 

 2. 열 단위로 세로로 보면서 가장 많이 나왔고 그것이 여러개라면 그 중 가장 앞의 알파벳을 찾습니다. 최다 빈도의 알파벳을 출력할 문자열 정답 변수 minWord뒤에 붙여주고 최다 빈도의 알파벳을 제외한 다른 알파벳들의 빈도 수들을 모두 ans변수에 더해줍니다.

 

 3. 정답을 출력합니다.

 

 

Code

#include <bits/stdc++.h>
using namespace std;
string minWord;
int n, length, sum;
vector <string> DNA;
int main(){
    cin >> n >> length;
    for(int i = 0; i < n; i++){
        string s;
        cin >> s;
        DNA.push_back(s);
    }
    for(int i = 0; i < length; i++){
        int alphaCnt[26] = {0};
        int big = 0;
        char maxAlpha;
        for(int j = 0; j < n; j++){
            alphaCnt[DNA[j][i] - 'A']++;
            big = max(big,alphaCnt[DNA[j][i] - 'A']);
        }
        for(int k = 0; k < 26; k++){
            if(alphaCnt[k] == big){
                minWord += k + 'A';
                maxAlpha = k + 'A';
                break;
            }
        }
        for(int k = 0; k < 26; k++){
            if(k + 'A' != maxAlpha) sum += alphaCnt[k];
        }
    }
    cout << minWord << '\n' << sum << '\n';
}