그럴듯한 개발 블로그
반응형

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
profile

그럴듯한 개발 블로그

@donghyk2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!