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';
}
'백준 문제 풀이' 카테고리의 다른 글
백준 1106 호텔 (C++) (0) | 2024.08.16 |
---|---|
백준 1644번 - 소수의 연속합 (C++, 에라토스테네스의 체, 누적합, 투포인터) (0) | 2024.08.13 |
백준 7662번 - 이중 우선순위 큐 (C++) (0) | 2024.07.12 |
백준 1474번 - 밑 줄(java, 그리디, 구현) (0) | 2024.06.27 |
백준 1477번 - 휴게소 세우기 (Java) (0) | 2024.06.27 |