PS (C, C++)
[백준/C++] 16472 고냥이
최연재
2025. 1. 1. 22:46
https://www.acmicpc.net/problem/16472
코드
#include <iostream>
#include <unordered_map>
using namespace std;
#define FASTIO ios::sync_with_stdio(false); cin.tie(NULL);
int n, ans = 0;
string s;
unordered_map<char, int> m;
int main() {
FASTIO;
cin >> n >> s;
int left=0, right = 0;
while (right < s.length()) {
m[s[right]]++;
while (m.size() > n) {
m[s[left]]--;
if (m[s[left]] == 0) m.erase(s[left]);
left++;
}
ans = max(ans, right - left + 1);
right++;
}
cout << ans << "\n";
return 0;
}
설명
인식할 수 있는 알파벳의 수와 문자열을 입력받습니다.
while문 내에서 투포인터 알고리즘을 이용해서 문제를 풉니다. right 포인터에 위치하는 문자에 대해서 카운트를 증가시킵니다. 그리고 맵의 사이즈가 n 초과일 경우에는 left 포인터를 이동시키면서 맵에 n가지 알파벳만을 가지고 있도록 합니다. 이후 ans 값을 업데이트하고, right 포인터를 증가시켜줍니다.
마지막에 ans를 출력합니다.
느낀 점
맵을 활용한 투포인터로 문제를 풀었습니다.