[백준/BOJ] 백준 16472번 : 고냥이

2021. 2. 8. 01:57알고리즘 문제풀이

www.acmicpc.net/problem/16472

 

16472번: 고냥이

고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고

www.acmicpc.net

map<char, int> check를 통해 (문자, 개수)를 저장하여 투 포인터(두 포인터)를 이용해 문제를 해결했다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
#include <set>
#include <string>
#include <queue>
#include <map>
using namespace std;

int n;
string input;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	cin >> n;
	cin >> input;

	int left = 0;
	int right = 0;
	map<char, int> check;
	map<char, int>::iterator it;
	int result = -1;

	while (1)
	{
		if (check.size() > n) //인식할 수 있는 알파벳 개수를 넘어갔을때
		{
			check[input[left]]--;

			if (check[input[left]] == 0)
			{
				check.erase(input[left]);
			}
			left++;
		}

		else if (right == input.size())
			break;

		else if (check.size() <= n)
		{
			it = check.find(input[right]);

			if (it == check.end()) //input[right] 알파벳이 check에 없을때
				check.insert(make_pair(input[right], 1));

			else
				(*it).second++;

			if (check.size() <= n)
				result = max(result, right - left + 1);

			right++;
		}

	}
	cout << result;

	return 0;
}