20437번

seuls2·2023년 6월 7일

BOJ

목록 보기
42/55

20437

#include <iostream>
#include <algorithm>
#include <map>
using namespace std;

string s, t;
int minAnswer = 987654321;
int maxAnswer = 0;

void findAnswer(char a, int k, string w)
{
    for (int i = 0; i < w.length(); i++)
    {
        if (w[i] == a)
        {
            int wordLength = 0;
            int cnt = 0;
            int newIndex = i;
            while (cnt < k && newIndex < w.length())
            {
                wordLength++;
                if (w[newIndex] == a)
                {
                    cnt++;
                }
                newIndex++;
            }
            if (cnt == k)
            {
                minAnswer = min(minAnswer, wordLength);
                maxAnswer = max(maxAnswer, wordLength);
            }
        }
    }
}

int main()
{
    int t;
    cin >> t;
    for (int i = 0; i < t; i++)
    {
        unordered_map<char, int> alphabet;
        minAnswer = 987654321;
        maxAnswer = 0;

        string w;
        int k;
        cin >> w >> k;
        for (int i = 0; i < w.length(); i++)
        {
            alphabet[w[i]]++;
        }

        bool hasMoreCnt = false;
        for (auto it = alphabet.begin(); it != alphabet.end(); it++)
        {
            if (it->second >= k)
            {
                hasMoreCnt = true;
                findAnswer(it->first, k, w);
            }
        }
        if (!hasMoreCnt)
        {
            cout << -1 << endl;
            continue;
        }
        cout << minAnswer << " " << maxAnswer << endl;
    }
}
profile
공부 기록용 ( ᵕ·̮ᵕ )♩

0개의 댓글