Make Unreal REAL.
article thumbnail
12891. DNA 비밀번호

 

 

구간의 길이가 정해져 있다면, 일단 슬라이딩 윈도우를 생각해 볼 필요가 있다.

 

문자 개수 조건을 확인할 때 별도의 맵을 사용해서 조건보다 큰지 확인할 수도 있지만, 조건 맵에서 하나씩 빼고 더하면서 0보다 큰 수가 있는지 확인해줘도 된다.

 

#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

int SlidingWindow(string& DNA, int P, unordered_map<char, int>& umap)
{
    auto check = [&umap]() { for (auto& pr : umap) if (0 < pr.second) return false; return true; };

    int answer = 0;
    
    for (int i = 0; i < P; ++i)
        --umap[DNA[i]];

    answer += check();

    for (int i = P; i < DNA.length(); ++i)
    {
        ++umap[DNA[i - P]];
        --umap[DNA[i]];

        answer += check();
    }

    return answer;
}

int main(int argc, char* argv[])
{
    int P;
    string DNA;
    cin >> P >> P >> DNA;

    unordered_map<char, int> umap;
    cin >> umap['A'] >> umap['C'] >> umap['G'] >> umap['T'];

    cout << SlidingWindow(DNA, P, umap);

    return 0;
}

'자료구조 & 알고리즘 > 백준' 카테고리의 다른 글

2003. 수들의 합 2  (0) 2023.09.17
21921. 블로그  (0) 2023.09.15
11441. 합 구하기  (0) 2023.09.14
11657. 타임머신  (0) 2023.09.13
1197. 최소 스패닝 트리  (0) 2023.09.11
profile

Make Unreal REAL.

@diesuki4

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

검색 태그