본문 바로가기

백준 문제 풀이

백준 16472번 - 고냥이(C++)

728x90

https://www.acmicpc.net/problem/16472

 

투포인터 문제로 전형적인 정도까지는 아니지만 좋은 문제다. 두 좌표 사이의 대한 정보를 파악하는 것이 마치 누적합과도 비슷하다. 

#include <iostream>
#include <map>

using namespace std;

map<char, int> lettter;

int main(){
    int N; cin >> N;

    string cats; cin >> cats;
    int lo = 0;
    int hi = 1;
    int cnt = 1;
    for(char c = 'a'; c <= 'z'; c++){
        lettter.insert({c, 0});
    }
    int answer = 0;
    lettter[cats[lo]]++;
    while(hi < cats.size()){
        char c = cats[hi];

        if(lettter[c] == 0){
            cnt++;
        }
        lettter[c]++;

            while(cnt > N){
                lettter[cats[lo]]--;

                if(lettter[cats[lo]] == 0){
                    cnt--;
                }
                lo++;
            }

        answer = max(answer, hi - lo + 1);        
        hi++;
    }

    cout << answer << '\n';
}