반응형
https://www.acmicpc.net/problem/12891
12891번: DNA 비밀번호
평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA”
www.acmicpc.net
acgt배열을 unordered_map으로 만들어 두었으면 더 가독성 좋았을듯.
당시엔 생각이 안났다
// DNA 비밀번호
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <unordered_set>
using namespace std;
vector<int> acgt(4, 0), cur_acgt(4, 0);
void addChar(char obj) {
switch (obj) {
case 'A':
cur_acgt[0] += 1;
break ;
case 'C':
cur_acgt[1] += 1;
break ;
case 'G':
cur_acgt[2] += 1;
break ;
case 'T':
cur_acgt[3] += 1;
break ;
}
}
void deleteChar(char obj) {
switch (obj) {
case 'A':
cur_acgt[0] -= 1;
break ;
case 'C':
cur_acgt[1] -= 1;
break ;
case 'G':
cur_acgt[2] -= 1;
break ;
case 'T':
cur_acgt[3] -= 1;
break ;
}
}
bool isValid() {
for (int i = 0; i < 4; i++)
if (acgt[i] > cur_acgt[i])
return false;
return true;
}
int main(void) {
ios_base::sync_with_stdio(0);
cin.tie(0);
int input_size, target_size, res = 0;
string input;
cin >> input_size >> target_size >> input;
for (int i = 0; i < 4; i++)
cin >> acgt[i];
for (int i = 0; i < target_size; i++)
addChar(input[i]);
for (int i = 0; i + target_size <= input_size; i++) {
if (isValid())
res++;
deleteChar(input[i]);
if (i + target_size < input_size)
addChar(input[i + target_size]);
}
cout << res;
}
반응형
'<algorithm> > 백준' 카테고리의 다른 글
백준 1025 제곱수 찾기 c++ (0) | 2023.11.28 |
---|---|
백준 1013 Contact c++ (1) | 2023.11.28 |
백준 19583 싸이버개강총회 c++ (0) | 2023.11.28 |
백준 9009 피보나치 c++ (0) | 2023.11.22 |
백준 10844 쉬운 계단 수 c++ (0) | 2023.11.20 |