먼저 입력받은 문자열을 대소문자 상관없이 구간으로 처리한다. 따라서 먼저 문자열 전체를 소문자(혹은 대문자) 로 치환한다.
그리고 0 또는 1로 치환하고 이전에 치환된 적 있는 알파벳이라면 해당 부분은 삭제한다.
그리고 이전에 나왔는지 체크해 주기 위해서 map구조체를 선언 하고 <알파벳, 등장 횟수> 로 저장해 주었다.
등장한 적 있는 알파벳 삭제할 때는 공백으로 치환한 뒤 마지막에 제거해주었다.
소스 코드
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <climits>
#include <algorithm>
#include <map>
using namespace std;
using std::cin;
using std::cout;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
// 대 소문자 구분 x
map<char, int> ch;
string str;
cin >> str;
int k;
cin >> k;
string ans = "";
bool fl = false;
// 대 소문자 구분 x
for (int i = 0; i < str.size(); i++)
{
str[i] = tolower(str[i]);
}
str += ',';
// 반복 횟수
int cnt = 0;
for (int i = 0; i < str.size(); i++)
{
// 이전과 다른 문자가 나온 경우 또는 마지막
if ((i > 0 && str[i-1] != str[i]))
{
if (cnt >= k)
{
ans += '1';
}
else
{
ans += '0';
}
// map 에 추가
ch[str[i-1]]++;
// 동일 문자가 있는 경우 뒤 제거
if (ch[str[i-1]] > 1)
{
ans[ans.size() - 1] = ' ';
}
cnt = 1;
}
// 문자 반복 중
else
{
cnt++;
}
}
string answer;
for (int i = 0; i < ans.size(); i++)
{
if (ans[i]!= ' ')
{
answer += ans[i];
}
}
cout << answer;
}