하루 1문제 챌린지/Silver2

백준 12891번 DNA 비밀번호(C++)

그린푸딩 2024. 3. 2. 17:52
728x90
반응형

슬라이딩 윈도우 문제

 

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

using namespace std;

bool find(map<char,int>m,vector<int>num){
    
   if(m['A']<num[0])return false;
   if(m['C']<num[1])return false;
   if(m['G']<num[2])return false;
   if(m['T']<num[3])return false;
   
   return true;
}
       
int main(){
 
 int s,p;
 cin>>s>>p; 

 string t;
 cin>>t;
 
 vector<int>num(4);
 //A,C,G,T 
 for(int i=0;i<4;i++){
     cin>>num[i]; 
 } 
 
 int left=0;
 int right=left+p-1;
 map<char,int>m; 
 //초기값 
 
 for(int i=left;i<=right;i++){
     m[t[i]]++;
 }
 
 
 int cnt=0; 
 while(1){
     if(find(m,num)){
        cnt++;
     }
     m[t[left]]--; 
     left++;
     right++;
     if(right>=s)break;
     m[t[right]]++;
     
 }
  cout<<cnt;
}
728x90
반응형