오늘의 알고리즘
[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