오늘의 알고리즘

[C++] 백준 20437 문자열 게임 2

하늘하늘 . 2022. 5. 27. 09:52
 
#include <iostream>
#include <string.h>
#include <vector>
 
int main()
{
	int T = 0;
	std::cin >> T;
 
	for (int i = 0; i < T; ++i)
	{
		std::vector<std::vector<int>> vec(27, std::vector<int>());
 
		std::string s = {};
		int iMin = 10001;
		int iMax = 0;
		int N = 0;
 
		std::cin >> s;
		std::cin >> N;
 
		for (int j = 0; j < s.size(); ++j)
		{
			vec[s[j] - 'a'].push_back(j);
		}
 
		for (int j = 0; j < vec.size(); ++j)
		{
			if (vec[j].size() >= N)
			{
				for (int z = 0; z < vec[j].size(); ++z)
				{
					if (z + N - 1 < vec[j].size())
					{
						iMin = std::min(vec[j][z + N - 1] + 1 - vec[j][z], iMin);
						iMax = std::max(vec[j][z + N - 1] + 1 - vec[j][z], iMax);
					}
 
					else
						continue;
				}
			}
		}
 
		if (iMin != 10001 && iMax != 0)
			std::cout << iMin << " " << iMax << std::endl;
 
		else
			std::cout << -1 << std::endl;
	}
 
	return 0;
}

1. 문자열을 하나의 위치로 잡아서 a는 0번에 b는 1번에 알파벳 최대 26개이기 때문에 27으로 (26으로 해도 됬을 듯)

2. N만큼이라 했기 때문에 먼저들어간게 맨 앞이기에 z + N - 1 크기만큼 들어가있지 않으면 continue