-
[백준/BOJ] 1969번 DNA (C++)알고리즘 문제풀이/백준 2021. 9. 13. 18:52
https://www.acmicpc.net/problem/1969
각 열마다 A, C, G, T가 몇번 나오는지 저장할 수 있는 2차원 배열을 선언한다. 합이 가장 작은 DNA은 결국 한 열을 기준으로 각 행마다 빈도수가 많이 나온 것들로 구성하면 된다.
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
--------------
TAAGATAC
해밍 디스턴스는 n에서 각 행마다의 빈도수를 빼주면 된다.
#include <iostream> #include <algorithm> using namespace std; int n, m, sum; int cache[51][4]; int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for(int i = 0; i < n; i++) { string str; cin >> str; for(int j = 0; j < m; j++) { if(str[j] == 'A') cache[j][0]++; else if(str[j] == 'C') cache[j][1]++; else if(str[j] == 'G') cache[j][2]++; else if(str[j] == 'T') cache[j][3]++; } } string answer = ""; for(int i = 0; i < m; i++) { int max_cnt = 0, max_idx = 0; for(int j = 0; j < 4; j++) { if(cache[i][j] > max_cnt) { max_cnt = cache[i][j]; max_idx = j; } } if(max_idx == 0) answer += "A"; else if(max_idx == 1) answer += "C"; else if(max_idx == 2) answer += "G"; else if(max_idx == 3) answer += "T"; sum += (n - max_cnt); } cout << answer << "\n" << sum; }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 10798번 세로 읽기 (C++) (0) 2021.09.14 [백준/BOJ] 11000번 강의실 배정 (C++) (0) 2021.09.14 [백준/BOJ] 1931번 회의실 배정 (C++) (0) 2021.09.13 [백준/BOJ] 12845번 모두의 마블 (C++) (0) 2021.09.13 [백준/BOJ] 4796번 캠핑 (C++) (0) 2021.09.13